【发布时间】:2020-06-19 07:03:06
【问题描述】:
我正在开发一个 ASP.net Web 应用程序,它托管在 Windows 服务器中。我想用不同的用户时区测试 DST 回退模糊小时(2020 年 11 月 1 日上午 1 点 15 分)的一些功能。服务器时区是东部 (EST/EDT) 我可以改变它。但用户可以选择他们的时区。如果我将东部时区更改为 2020 年 11 月 1 日上午 1 点 15 分,则其他时区未根据用户看到的当前时间而不是时间进行调整。有没有办法手动设置其他时区时间。
【问题讨论】:
-
服务器版本甚至操作系统都无关紧要。对于初学者,不要使用
DateTime,至少使用 DateTimeOffset。DateTime类型仅支持 2.5 种值 - UTC、Local 和 Unspecified。Local表示执行帐户使用的任何时区,未指定表示您不知道偏移量是多少。 -
日期本地化是一个复杂的话题,没有完美的解决方案。在我的情况下,我更喜欢让我的系统在 UTC 日期运行,然后当它与用户交互时,我转换到/从用户的时区。
-
也不要只存储 UTC,除非您还单独存储实际时区。正如 Jon Skeet 所写的UTC is not a silver bullet。例如,UTC 对 DST 只字未提,这意味着您不能真正使用 UTC 时间,除非您知道使用了哪些偏移量和 DST 规则
-
最好的解决方案是存储 IANA 时区名称(例如
Europe\Berlin)。 IANA 时区数据库 (tzdb) 是事实上的时区标准,包含可追溯到 1900 年代的所有时区的偏移量和 DST 规则。这就是为什么这么多论坛询问用户他们的时区名称,而不是他们的偏移量。您可能也应该使用 NodaTime 来处理时区和转换。 -
“如果我将东部时区更改为 2020-11-1 01.15”-> 我迷失在这句话中。将“时区”更改为“日期时间”对我来说没有意义。时间是一样的,时间的表现方式在变化。
标签: c# asp.net windows windows-server-2012