时区分钟偏移量的 TimeZoneInfo

11

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

1个回答

12
我希望从中创建一个TimeZoneInfo,怎么做呢?
不可能。时区偏移并不等同于时区。请仔细阅读timezone tag wiki,特别是“Time Zone != Offset”部分。
那么如何使用分钟偏移将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。你需要更新上面的内容来考虑这一点吗? - Sachin Kainth
关于你上次的陈述,这就是我在JavaScript中获取偏移量的方法。这样不够好吗? var d = new Date(); var minutes = d.getTimezoneOffset(); - Sachin Kainth
这将给你当前的偏移量。当前的偏移量不保证始终有效。 - Matt Johnson-Pint
DateTimeOffset,您可以使用 .DateTime 属性获取本地 DateTime - Matt Johnson-Pint
我需要知道用户当前的时间,如果没有应用夏令时,那么我想要下午3点,但如果应用了夏令时,我想要下午4点。我只想知道他们时钟上的当前时间。 - Sachin Kainth
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接