也许我不理解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();
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等时区信息的格式传输?
假设您正在使用Newtonsoft,Newtonsoft将反序列化为您的DateTime属性为UTC。因此,您无需对反序列化执行任何操作。如果从SQL Server检索DateTime,则其DateTimeKind将为Unspecified。你需要设置它。
eventDateTime = DateTime.SpecifyKind(eventDateTime, DateTimeKind.Utc);
然后,Newtonsoft会将其序列化为UTC,并且您的用户的javascript客户端将在您的用户的正确时区中拥有时间。