c# - DateTime.ToUniversalTime() 如何工作?

标签 c# .net datetime utc

如何从标准 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/

相关文章:

sql-server - 使用内连接更新最接近日期时间匹配的查询

php - Laravel Eloquent 比较日期时间字段中的日期

c# - 在什么情况下 Text 可能与 ValueText 不同

c# - 阻止包含多个元素的集合?

c# - 配置Window Service Base Path并读取环境变量

.net - C# 中的运算符重载和 Linq Sum

c# - MVVM:在 TreeViewItem 中使用 IsExpanded 和 IsSelected 扩展只读模型

c# - 写入字节时如何使字节随机?

c# - 如何使用 WinForms 的现有组件创建类似 Google 的日历

java - XMLGregorianCalendar 到 DateTime Java