相关疑难解决方法(0)

如何通过UTC偏移确定时区?

我有一个场景,我有一个时区偏移(以分钟为单位),需要确定它的时区.我知道所有数据都不可用(例如,可能有几个时区的偏移量为-240分钟),但"最佳猜测"是可以接受的.

我的第一次传球看起来像这样:

foreach (var info in TimeZoneInfo.GetSystemTimeZones())
{
    if (info.BaseUtcOffset.TotalMinutes == timezoneOffset)
    {
         // do something here if this is a valid timezone
    }
}
Run Code Online (Sandbox Code Playgroud)

这种方式有效,但我需要考虑夏令时,这有点让我失望.我添加了这个可怕的黑客:

foreach (var info in TimeZoneInfo.GetSystemTimeZones())
{
    var extra = info.IsDaylightSavingTime(DateTime.Now) ? 60 : 0;
    if (info.BaseUtcOffset.TotalMinutes + extra == timezoneOffset)
    {
         // do something here if this is a valid timezone
    }
}
Run Code Online (Sandbox Code Playgroud)

这样做"足够好",因为当夏令时没有生效时,我可以向用户显示正确的时间,并且在夏令时期间大约70%是正确的.仍然......这对我的眼球来说是一些可怕的代码.

有一个更好的方法吗?更优雅会更好,更准确更好.

更新

从技术上讲,我可以访问Javascript可以获得的有关日期的任何信息.我有一个页面,我在其中放置了一个名为"offset"的隐藏字段.我有一个JQuery函数,用DateTime().getTimezoneOffset()填充偏移字段.虽然我没有在DateTime对象上看到任何有用的东西,但也许这会打开其他想法的途径.

javascript c# timezone utc

18
推荐指数
2
解决办法
2万
查看次数

标签 统计

c# ×1

javascript ×1

timezone ×1

utc ×1