如何从标准 DateTime
格式转换为 UTC?
更具体地说,如果我在一个时区创建一个 DateTime
对象,然后切换到另一个时区并在其上运行 ToUniversalTime()
,它如何知道转换是否正确完成并且时间仍然准确表示?
最佳答案
没有附加到 DateTime
对象的隐式时区。如果您在其上运行 ToUniversalTime()
,它会使用运行代码的上下文的时区。
例如,如果我从 1/1/1970 的纪元创建一个 DateTime
,无论我在世界的哪个地方,它都会给我相同的 DateTime
对象.
如果我在格林威治运行代码时对其运行 ToUniversalTime()
,那么我得到的时间是相同的。如果我住在温哥华时这样做,那么我会得到 -8 小时的偏移 DateTime
对象。
这就是为什么当您需要进行任何类型的日期转换或本地化时,将时间相关信息作为 UTC 时间存储在数据库中的重要性。考虑一下您的代码库是否已转移到另一个时区的服务器设施;)
编辑:Joel 的回答中的注释 - 默认情况下 DateTime
对象的类型为 DateTimeKind.Local
。如果您解析日期并将其设置为 DateTimeKind.Utc
,则 ToUniversalTime()
不执行任何转换。
这里有一篇关于 "Best Practices Coding with Date Times" 的文章,以及关于 Converting DateTimes with .Net 的文章.
关于c# - DateTime.ToUniversalTime() 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1201378/