System.DateTime和System.DateTimeOffset之间的区别

时间:2011-07-01 08:26:27

标签: c# .net datetime datetimeoffset

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

3 个答案:

答案 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