所以我不确定使用哪一个,因为我对两者的理解都是有限的。我遇到的问题是我想显示时间取决于用户在其机器上设置时钟的时区。例如,如果用户将他们的机器设置为EST但是在加利福尼亚州,我希望时间在EST中显示。我应该使用toUniversalTime()和ToLocalTime()?
ChangeDate = DBNulls.DBNullToDateTime(reader[ChangeDateOrdinal]).ToUniversalTime()?
ChangeDate = DBNulls.DBNullToDateTime(reader[ChangeDateOrdinal]).ToLocalTime()?
答案 0 :(得分:4)
在这种情况下,您将使用ToLocalTime()
...但是,如果数据库中的值已经是UTC,那么它才会起作用。如果它在某个其他时区,那就完全不同了:)
在许多(但不是全部)情况下,将UTC存储在数据库中是正确的方法。因此,当您接受用户输入时,可能想要将其转换为UTC并存储UTC值...然后当您使用ToLocalTime()
将值呈现给用户时(可能是它将使用该查看用户的时区。
机器的物理位置无关紧要 - 系统时区非常重要。
现在,如果你正在编写一个网络应用程序,因此用户的时区不是运行.NET代码的机器的时区,那又是一个不同的问题 - 那么您可以将UTC发送回客户端并获取Javascript以将其转换为本地时间,或者检测用户的时区(再次使用Javascript)并在服务器上执行转换,可能使用TimeZoneInfo
插件:如果您愿意离开BCL课程,您可能会发现我的Noda Time库有助于使事情更加清晰。它具有您可能想要使用的所有不同类型值的不同类型,以及对IANA维护的最常见时区数据库的支持,如果您正在检测客户端时区,这可能会有所帮助。 / p>