10

从 JavaScript 中,我使用对象getTimezoneOffset上的方法将用户的客户端日期时间从 UTC 偏移的分钟数传递给控制器Date​​。现在我在服务器端有了这些信息,我想从中创建一个 TimeZoneInfo。这怎么可能?如果这是不可能的,那么如何使用分钟偏移量将服务器端的 UTC 日期转换为客户端的时区?

4

1 回答 1

10

我想从中创建一个 TimeZoneInfo 。这怎么可能?

这是不可能的。时区偏移与时不同。请阅读时区标签 wiki,尤其是标题为“时区!=偏移”的部分。

...那么如何使用分钟偏移量将服务器端的 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 中从客户端检索到的偏移量不一定是适用于数据库日期的正确偏移量。当您获得偏移量时,它必须是针对特定时间的。由于许多时区会更改夏令时的偏移量,因此您不能假设您当前拥有的偏移量适用于数据库中的任何特定值。因此,虽然上面的代码可以满足您的要求,但总的来说它可能仍然不是一个好主意。

于 2013-09-24T15:49:27.627 回答