从JavaScript我已经使用getTimezoneOffset
对象上的Date
方法向控制器传递了用户的客户端日期时间偏离UTC的分钟数。现在我在服务器端有这些信息,我想从中创建一个TimeZoneInfo。这怎么可能?如果这不可能,那么如何使用分钟偏移量将服务器端的UTC日期转换为客户端的时区?
答案 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中从客户端检索的偏移量不一定是应用于数据库日期的正确偏移量。当你得到偏移时,它必须在特定的时刻。由于许多时区会更改夏令时的偏移量,因此无法假设您当前具有的偏移量适用于数据库中的任何特定值。因此,虽然上面的代码完成了你的要求,但一般来说这可能仍然不是一个好主意。