谁能解释 C#.NET 中 System.DateTime 和 System.DateTimeOffset 之间的区别?哪个最适合与来自不同时区的用户一起构建 Web 应用程序?
3 回答
DateTime 值定义特定的日期和时间,它包括一个 Kind 属性,该属性提供有关该日期和时间所属的时区的有限信息。
DateTimeOffset 结构表示日期和时间值,以及指示该值与 UTC 相差多少的偏移量。因此,该值始终明确地标识单个时间点。
DateTimeOffset 应被视为应用程序开发的默认日期和时间类型,因为 DateTimeOffset 值的使用比 DateTime 值的使用更为普遍。
在以下位置查看更多信息和代码示例:http: //msdn.microsoft.com/en-us/library/bb384267.aspx
这里有几点:
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
DateTimeOffset 将日期时间表示为 UTC 日期时间。
所以
DateTimeOffset dtoNow = DateTimeOffset.Now;
和
DateTimeOffset dtoUTCNow = DateTimeOffset.UTCNow;
这里 dtoNow 将等于 dtoUTCNow,即使一个被初始化为 DateTimeOffset.Now 而另一个被初始化为 DateTimeOffset.UTCNow;
所以 DatetimeOffset 适合存储 UTC 的差异或偏移量。
有关详细信息,请参阅MSDN。