从JavaScript,我已经使用getTimezoneOffset
对象上的Date
方法向 Controller 传递了用户的客户端日期时间与UTC的偏移量(以分钟为单位)。现在,我已经在服务器端获得了此信息,我想从中创建一个TimeZoneInfo。这怎么可能?如果这不可能,那么如何使用分钟偏移量将服务器端的UTC日期转换为客户端的时区?
最佳答案
这是不可能的。时区偏移量与时区不同。请阅读timezone tag wiki,尤其是标题为“Time Zone!= Offset”的部分。
创建一个表示该时刻的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中从客户端检索的偏移量不一定是适用于数据库日期的正确偏移量。当您获得偏移量时,它必须处于特定的时间。由于许多时区都会更改夏令时的偏移量,因此您不能假定您当前拥有的偏移量适用于数据库中的任何特定值。因此,尽管上面的代码完成了您所要求的操作,但总体上可能仍然不是一个好主意。
关于c# - 时区分钟偏移量的TimeZoneInfo,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18985578/