时区分钟偏移量的 TimeZoneInfo
Posted
技术标签:
【中文标题】时区分钟偏移量的 TimeZoneInfo【英文标题】:TimeZoneInfo from timezone minutes offset 【发布时间】:2013-09-29 21:40:56 【问题描述】:从 javascript 中,我使用 Date
对象上的方法 getTimezoneOffset
将用户客户端日期时间与 UTC 偏移的分钟数传递给控制器。现在我在服务器端有了这些信息,我想从中创建一个 TimeZoneInfo。这怎么可能?如果这是不可能的,那么如何使用分钟偏移量将服务器端的 UTC 日期转换为客户端的时区?
【问题讨论】:
【参考方案1】:我想从中创建一个 TimeZoneInfo。这怎么可能?
这是不可能的。 时区偏移与时区不同。请阅读timezone tag wiki,尤其是标题为“Time Zone != Offset”的部分。
...那么如何使用分钟偏移量将服务器端的 UTC 日期转换为客户端的时区?
创建一个代表那个时刻的DateTimeOffset
。例如:
// From your database. Make sure you specify the UTC kind.
DateTime utc = new DateTime(2013, 1, 1, 0, 0, 0, DateTimeKind.Utc);
// From JavaScript
int offsetMinutes = 420;
// Don't forget to invert the sign here
TimeSpan offset = TimeSpan.FromMinutes(-offsetMinutes);
// The final result
DateTimeOffset dto = new DateTimeOffset(utc).ToOffset(offset);
另外,请确保您了解您在 JavaScript 中从客户端检索到的偏移量不一定是适用于您的数据库日期的正确偏移量。当您获得偏移量时,它必须是针对特定时间的。由于许多时区会更改夏令时的偏移量,您不能假设您当前拥有的偏移量适用于数据库中的任何特定值。因此,虽然上面的代码可以满足您的要求,但总的来说它可能仍然不是一个好主意。
【讨论】:
顺便说一句,由于某种原因 getTimezoneOffset 做了一些很奇怪的事情。如果您距离 UTC +10 小时,它将返回 -600 而不是 600。您是否需要更新上述内容以考虑到这一点? 关于您的最后一条语句,这就是我在 JavaScript 中获得偏移量的方式。这还不够好吗? var d = 新日期(); var minutes = d.getTimezoneOffset(); 在构建偏移量TimeSpan
时已经通过否定分钟来处理反号。
最后顺便找了个DateTime对象。
这将为您提供 current 偏移量。当前偏移量不保证始终有效。以上是关于时区分钟偏移量的 TimeZoneInfo的主要内容,如果未能解决你的问题,请参考以下文章