DateTime和DateTimeOffset之间有什么区别,什么时候应该使用?
目前,我们有一种以时区感知的方式处理.NET DateTime的标准方法:每当我们生成一个DateTime时,我们就在UTC (例如使用DateTime.UtcNow)中这样做,每当我们显示一个DateTime时,我们就会将它从UTC转换回用户的本地时间。
这很好,但我一直在阅读DateTimeOffset以及它如何捕捉对象本身的本地和UTC时间。
发布于 2010-12-02 17:47:08
DateTime只能存储两个不同的时间,本地时间和UTC。类别属性表示哪个。
DateTimeOffset对此进行了扩展,能够存储来自世界各地的本地时间。它还存储该本地时间与UTC之间的偏移量。注意,除非在类中添加一个额外的成员来存储UTC偏移量,否则DateTime是如何做到这一点的。或者只和UTC合作过。这本身就是个好主意。
发布于 2018-10-19 09:32:00
微软的这段代码解释了一切:
// Find difference between Date.Now and Date.UtcNow
date1 = DateTime.Now;
date2 = DateTime.UtcNow;
difference = date1 - date2;
Console.WriteLine("{0} - {1} = {2}", date1, date2, difference);
// Find difference between Now and UtcNow using DateTimeOffset
dateOffset1 = DateTimeOffset.Now;
dateOffset2 = DateTimeOffset.UtcNow;
difference = dateOffset1 - dateOffset2;
Console.WriteLine("{0} - {1} = {2}",
dateOffset1, dateOffset2, difference);
// If run in the Pacific Standard time zone on 4/2/2007, the example
// displays the following output to the console:
// 4/2/2007 7:23:57 PM - 4/3/2007 2:23:57 AM = -07:00:00
// 4/2/2007 7:23:57 PM -07:00 - 4/3/2007 2:23:57 AM +00:00 = 00:00:00发布于 2010-12-02 02:59:58
有几个地方DateTimeOffset是有意义的。一种是当你处理反复出现的事件和夏令时。假设我想设置一个闹钟,每天早上9点响。如果我使用“商店作为UTC,显示为本地时间”规则,那么当夏时制生效时,警报就会在不同的时间响起。
可能还有其他例子,但上面的示例实际上是我在过去遇到的(这是在向BCL中添加DateTimeOffset之前--当时我的解决方案是显式地将时间存储在本地时区,并沿其一侧保存时区信息:基本上是DateTimeOffset内部所做的)。
https://stackoverflow.com/questions/4331189
复制相似问题