13

谁能解释 C#.NET 中 System.DateTime 和 System.DateTimeOffset 之间的区别?哪个最适合与来自不同时区的用户一起构建 Web 应用程序?

4

3 回答 3

9

DateTime 值定义特定的日期和时间,它包括一个 Kind 属性,该属性提供有关该日期和时间所属的时区的有限信息。

DateTimeOffset 结构表示日期和时间值,以及指示该值与 UTC 相差多少的偏移量。因此,该值始终明确地标识单个时间点。

DateTimeOffset 应被视为应用程序开发的默认日期和时间类型,因为 DateTimeOffset 值的使用比 DateTime 值的使用更为普遍。

在以下位置查看更多信息和代码示例:http: //msdn.microsoft.com/en-us/library/bb384267.aspx

于 2011-07-01T08:27:15.723 回答
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

于 2011-07-01T08:34:35.310 回答
3

DateTimeOffset 将日期时间表示为 UTC 日期时间。

所以

DateTimeOffset dtoNow = DateTimeOffset.Now;

DateTimeOffset dtoUTCNow = DateTimeOffset.UTCNow;

这里 dtoNow 将等于 dtoUTCNow,即使一个被初始化为 DateTimeOffset.Now 而另一个被初始化为 DateTimeOffset.UTCNow;

所以 DatetimeOffset 适合存储 UTC 的差异或偏移量。

有关详细信息,请参阅MSDN

于 2011-07-01T08:36:44.243 回答