在c#中保存通用时间,用于传递到azure中托管的服务器的用户本地日期时间

问题描述 投票:0回答:2

也许我不理解C#中的'ToUniversalTime()'方法,但我想让我的用户本地时间'eventDateTime'并获得保存在我的表中的通用时间

我在约会时间(例如太平洋标准时间太平洋标准时间的日期时间)通过,我想获得通用时间,但我的结果是一样的。我是否需要在javascript中获取时区偏移并以某种方式首先使用它?

这是我正在测试的方式,这是在Azure中运行的

eventDateTime从用户传入12/21/2017 @ 5:15 PM,t1与eventdatetime相同。 T2,T3,T4是12/21/2017 @ 11:01:57 PM

var t1 = eventDateTime.ToUniversalTime();
var t2 = DateTime.UtcNow;
var t3 = DateTime.Now.ToUniversalTime();
var t4 = DateTime.Now.ToLocalTime();
c# azure datetime datetime-format
2个回答
0
投票

DateTime.ToUniversalTime的行为取决于DateTime的Kind属性。来自MSDN

从.NET Framework 2.0版开始,ToUniversalTime方法返回的值由当前DateTime对象的Kind属性确定。下表描述了可能的结果。

DateTimeKind.Utc:不执行转换。

DateTimeKind.Local:当前DateTime对象转换为UTC。

DateTimeKind.Unspecified:假定当前DateTime对象是本地时间,并且执行转换,就像Kind是Local一样。

你收到什么样的DateTime?如果您正在解析Web服务中的DateTime,它是否以保留ISO 8601等时区信息的格式传输?


0
投票

假设您正在使用Newtonsoft,Newtonsoft将反序列化为您的DateTime属性为UTC。因此,您无需对反序列化执行任何操作。如果从SQL Server检索DateTime,则其DateTimeKind将为Unspecified。你需要设置它。

eventDateTime = DateTime.SpecifyKind(eventDateTime, DateTimeKind.Utc);

然后,Newtonsoft会将其序列化为UTC,并且您的用户的javascript客户端将在您的用户的正确时区中拥有时间。

© www.soinside.com 2019 - 2024. All rights reserved.