Difference between 'DateTime' and 'DateTimeOffset'
DateTime和DateTimeOffset对象有什么区别?
什么时候应该使用每一个?
在可能更改服务器区域的Web应用程序中,存储日期和时间。 哪一个更好,还是有其他建议?
DateTimeOffset表示一个时间点,通常表示为日期和时间,相对于协调世界时(UTC),它提供比DateTime结构更大程度的时区感知。 请在此处查看 - http://msdn.microsoft.com/en-us/library/bb546101.aspx。
-
那谢谢啦。帮助:D我不明白为什么有些人会对我的简单问题投反对票!我是新人,我应该学习越来越多,而且我应该问我的问题!
-
它具有的唯一"时区感知度"是它存储特定时刻的UTC偏移量。它没有其他时区知识,包括创建值的时区,因此它唯一真正的用途是历史数据。其他任何东西都没用。
-
@ Suncat2000,这个偏移让一切变得与众不同! (它带来'时区意识')。当你拍照时,你的相机会给它分配当地时间(比如'DateTime')。如果它可以节省相当于'DateTimeOffset',那么在旅行或夏令时变化时,回答'我是在上午9:00或上午10:00拍摄这张照片'会有问题。一个错误的架构决策给所有关心时间的摄影师带来了问题。这同样适用于IT系统中的所有DateTime字段。
-
@AndrzejMartyna那不是时区意识。它只是与UTC的偏移,几乎没有告诉你。除了日期时间值来自创建时区的时区之外,您无法可靠地确定有关时区的任何信息。一文不值。严格遵守UTC并避免混淆或存储时区标识符,以便您可以执行有意义的转换。 DATETIMEOFFSET毫无价值。
-
@ Suncat2000,部分同意。我认为这完全取决于开发人员是否遵守项目中使用的规则。如果您使用DateTime,则您依赖于开发人员当前的心情。愚弄DateTimeOffset有点困难。解决方案可以是实现你的类并完全停止使用DateTime(因为你建议总是使用两个字段 - 顺便说一句。你经常看到这样的方法吗?;)。
DateTimeOffset克服DateTime的缺点。 它表示为相对于协调世界时(UTC)的日期和时间。
例如:
如果您没有参考点,那么在4/18/2013 11:00:00 AM意味着绝对没有任何意义。 那可能是世界上任何地方的11:00:00。 DateTimeOffset包含有关您正在处理的时区的信息,这在世界上有所不同!
更多细节必须阅读一次
-
唯一的区别是它只存储DateTime所代表的特定时刻的UTC偏移量。它不存储实际时区,因此基本上所有可以使用它的是在相对本地时间和UTC之间进行转换。在某些情况下有帮助,但信息相当薄弱,否则。 DateTimeOffset不是一个时区感知的DateTime类。