有人能解释一下C#.NET中System.DateTime和System.DateTimeOffset的区别吗?哪个最适合与来自不同时区的用户构建Web应用程序?
答案 0 :(得分:9)
DateTime值定义特定日期和时间,它包含Kind属性,该属性提供有关该日期和时间所属时区的有限信息。
DateTimeOffset结构表示日期和时间值,以及指示该值与UTC的差异程度的偏移量。因此,该值始终明确地标识单个时间点。
DateTimeOffset应被视为应用程序开发的默认日期和时间类型,因为DateTimeOffset值的使用比DateTime值的使用更为常见。
查看更多信息,代码示例: http://msdn.microsoft.com/en-us/library/bb384267.aspx
答案 1 :(得分:3)
这里有几点意见:
DateTime信息应以UTC格式存储在您的数据库中:
http://www.4guysfromrolla.com/articles/081507-1.aspx
在Web应用程序中使用DateTime信息时,需要将其转换为LocalTime:
DateTime.UtcNow.ToLocalTime();
将从Web服务器的角度将其转换为本地时间。
如果您在一个位置拥有WebServer,为多个国家/地区的客户提供服务,那么您需要在客户端本身的javascript中执行此操作:
myUTCDate.toLocaleTimeString();
http://www.java2s.com/Code/JavaScript/Date-Time/ConvertDatetoLocaleString.htm
答案 2 :(得分:3)
DateTimeOffset将日期时间表示为UTC日期时间。
所以
DateTimeOffset dtoNow = DateTimeOffset.Now;
与
相同DateTimeOffset dtoUTCNow = DateTimeOffset.UTCNow;
这里dtoNow将等于dtoUTCNow,即使一个被初始化为DateTimeOffset.Now而另一个被初始化为DateTimeOffset.UTCNow;
因此,DatetimeOffset适用于存储差值或偏移量w.r.t UTC。
有关详细信息,请参阅MSDN。