C# 来自时区分钟偏移量的时区信息

C# 来自时区分钟偏移量的时区信息,c#,javascript,asp.net-mvc-4,datetime,timezone,C#,Javascript,Asp.net Mvc 4,Datetime,Timezone,从我传递给控制器的JavaScript中,使用date对象上的方法getTimezoneOffset将用户的客户端日期时间与UTC偏移的分钟数传递给控制器。现在我在服务器端有了这些信息,我想从中创建一个TimeZoneInfo。这怎么可能?如果不可能,那么如何使用分钟偏移量将服务器端的UTC日期转换为客户端的时区 我想从中创建时区信息。这怎么可能 这是不可能的。时区偏移与时区不同。请阅读,特别是标题为“时区!=偏移量”的部分 。。。那么,如何使用分钟偏移量将服务器端的UTC日期转换为客户端的时区

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

我想从中创建时区信息。这怎么可能

这是不可能的。时区偏移与时区不同。请阅读,特别是标题为“时区!=偏移量”的部分

。。。那么,如何使用分钟偏移量将服务器端的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对象。这将为您提供当前偏移量。不能保证当前偏移始终有效。