TimeZoneInfo从时区分钟偏移

时间:2013-09-24 15:18:57

标签: c# javascript asp.net-mvc-4 datetime timezone

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

1 个答案:

答案 0 :(得分:8)

  

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

这是不可能的。 时区偏移时区不同。请阅读timezone tag 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中从客户端检索的偏移量不一定是应用于数据库日期的正确偏移量。当你得到偏移时,它必须在特定的时刻。由于许多时区会更改夏令时的偏移量,因此无法假设您当前具有的偏移量适用于数据库中的任何特定值。因此,虽然上面的代码完成了你的要求,但一般来说这可能仍然不是一个好主意。