System.DateTime和System.DateTimeOffset的区别

13

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


何时您会更喜欢使用DateTime而不是DateTimeOffset? - V4Vendetta
3个回答

9

DateTime是一种日期和时间值,它包含一个Kind属性,提供了有关该日期和时间所属时区的有限信息。

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

在应用程序开发中,应将DateTimeOffset视为默认的日期和时间类型,因为使用DateTimeOffset值的情况比使用DateTime值的情况要常见得多。

了解更多信息、代码示例,请参阅: http://msdn.microsoft.com/en-us/library/bb384267.aspx


3
这里有几个要点:
在数据库中应该以UTC格式存储日期时间信息。
当你在Web应用程序中使用日期时间信息时,需要将其转换为本地时间。
参考链接:https://web.archive.org/web/20201202215446/http://www.4guysfromrolla.com/articles/081507-1.aspx
 DateTime.UtcNow.ToLocalTime();

将把它从Web服务器的角度转换为本地时间。

如果您在一个位置拥有Web服务器,为多个国家/地区的客户提供服务,则需要在客户端上使用JavaScript执行此操作:

 myUTCDate.toLocaleTimeString();

http://www.java2s.com/Code/JavaScript/Date-Time/ConvertDatetoLocaleString.htm


3

DateTimeOffset代表了UTC日期时间。

因此,

DateTimeOffset dtoNow = DateTimeOffset.Now;

是相同的。
DateTimeOffset dtoUTCNow = DateTimeOffset.UTCNow;

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

因此,DateTimeOffset非常适合存储与UTC的差异或偏移量。

有关更多详细信息,请参见MSDN


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接