ToUniversalTime() 和 ToLocalTime() 之间的区别

本文关键字:区别 之间 ToUniversalTime ToLocalTime | 更新日期: 2023-09-27 18:31:21

所以我不确定使用哪一个,因为我对两者的理解都是有限的。我遇到的问题是我想根据用户在其计算机上设置时钟的时区来显示时间。例如,如果用户将他们的机器设置为 EST,但在加利福尼亚州,我希望时间显示在 EST 中。 我应该使用 toUniversalTime() 和 ToLocalTime()吗?

ChangeDate = DBNulls.DBNullToDateTime(reader[ChangeDateOrdinal]).ToUniversalTime()?
ChangeDate = DBNulls.DBNullToDateTime(reader[ChangeDateOrdinal]).ToLocalTime()?

ToUniversalTime() 和 ToLocalTime() 之间的区别

在这种情况下,您将使用 ToLocalTime() ...但这只有在数据库中的值已经采用 UTC 时才会起作用。如果它在其他时区,那是完全不同的事情:)

在许多情况下(但不是全部)情况下,将 UTC 存储在数据库中是正确的方法。因此,当您接受用户输入时,您可能希望将其转换为 UTC 并存储 UTC 值...然后,当您使用 ToLocalTime() 将值显示回给用户(可能是不同时区的其他用户)时,它将使用该查看用户的时区。

机器的物理位置无关紧要 - 重要的是系统时区。

现在,如果您正在编写一个 Web 应用程序,因此用户的时区不是运行 .NET 代码的计算机的时区,这又是一个不同的问题 - 那么您可以将 UTC 寄回客户端并让 Javascript 将其转换为本地时间,或者检测用户的时区(再次使用 Javascript)并在服务器上执行转换, 可能使用TimeZoneInfo.

插件:如果你愿意离开BCL课程,你可能会发现我的Noda Time库有助于让事情变得更清晰。对于您可能想要使用的所有不同类型的值,它具有不同的类型,并支持由 IANA 维护的最常见时区数据库,如果您检测到客户端时区,这可能会有所帮助。