【发布时间】:2016-09-02 18:25:59
【问题描述】:
我有一个在纽约运行的服务器,它以当地时间将 DateTime 保存到数据库中。
然后,我有一个在 GMT 时区运行的客户端应用程序,它需要在纽约本地时间保存一个 DateTime 我可以使用:
TimeZoneInfo.ConvertTime(DateTime.Now, TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"))
或者我需要考虑夏令时?
现在在我的 UI 中,我需要显示 2 列。 1)数据库中的日期时间和数据库中的日期时间转换为格林威治标准时间
我该怎么做?
【问题讨论】:
-
如果真的在 EST,你可以加 5 个小时。但我怀疑它更有可能在东部时间 - 有时是美国东部时间,有时是美国东部时间。那时,您需要准确地知道哪个东部时间,因为不同版本的 ET 在不同时间过渡,或者在历史上做过......
-
谢谢乔恩。我不需要考虑夏令时而不是仅仅增加 5 小时吗?
-
您拥有的代码实际上会将 DST 考虑在内。至少当我前段时间在这里测试它时确实如此。这很容易测试。使用您的代码转换属于 EST 的日期/时间和属于 EDT 的日期/时间。您应该会看到不同的时间增量。
-
对,已经开始在这里写答案,但后来不得不接听电话。我在这里唯一要补充的是,通过记录当地时间,您会丢失信息:您将无法区分 11 月 5 日星期日凌晨 1:30 的第一次出现和第二次出现之间的区别。你应该弄清楚在这种情况下你想做什么。
-
您应该永远将本地时间存储在数据库中。这是一个非常糟糕的想法。正如评论中所解释的,它可能会导致一些歧义。此外,如果服务器曾经移动,代码可能会使用另一个时区,所以所有时间都会因为不正确。这是一个糟糕的设计决策,最好的办法是修改数据并修复代码。