c# - ToUniversalTime() 和 ToLocalTime() 之间的区别

标签 c# .net

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

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

最佳答案

在那种情况下,您可以使用 ToLocalTime()... 但只有当数据库中的值已经采用 UTC 时,这才有效。如果它在其他时区,那就完全不同了:)

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

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

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

Plug:如果你愿意离开 BCL 类(class),你可能会发现我的 Noda Time图书馆有助于让事情更清晰。对于您可能想要使用的所有不同类型的值,它具有不同的类型,并且支持由 IANA 维护的最常见的时区数据库,如果您正在检测客户端时区,这可能会有所帮助。

关于c# - ToUniversalTime() 和 ToLocalTime() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34907825/

相关文章:

c# - Windows 8 Developer Preview 中缺少 Type.GetProperty() 方法

c# - 如何设置用户控制按钮的背景颜色?以及如何将参数传递给它的事件处理程序?

c# - Visual Studio 设计器不显示嵌入式字体

.net - 我可以根据手动编辑的 .dbml 重新生成 .designer.cs 吗?

javascript - 调试属于 Dotnet 的 React Web 应用程序

c# - ASP.NET Web Api 中 HttpContext.Current.Items 的替代方案

c# - ASP.NET MVC5 Google APIs GoogleWebAuthorizationBroker.AuthorizeAsync 在本地工作但未部署到 IIS

c# - 二进制搜索和哈希表搜索

c# - WPF标签下的可点击按钮

java - 从在 Tomcat 上运行的 Spring Controller 使用 Runtime.getRuntime().exec 调用基于 .Net Window 的应用程序