【发布时间】:2010-11-19 11:19:57
【问题描述】:
我有一个时区偏移量(以分钟为单位)并且需要为其确定时区的情况。我知道并非所有数据都可用(例如,可能有多个时区偏移为 -240 分钟),但“最佳猜测”是可以接受的。
我的第一关是这样的:
foreach (var info in TimeZoneInfo.GetSystemTimeZones())
{
if (info.BaseUtcOffset.TotalMinutes == timezoneOffset)
{
// do something here if this is a valid timezone
}
}
这种方法可行,但我需要考虑夏令时,这让我有些失望。我添加了这个可怕的 hack:
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
}
}
这“足够好”,因为我可以在夏令时无效时向用户显示正确的时间,并且在 DST 期间正确率约为 70%。仍然......这对我来说是一些糟糕的代码。
有没有更好的方法来做到这一点?更优雅会更好,更准确会更好。
更新
从技术上讲,我可以访问 Javascript 可以获得的有关日期的任何信息。我有一个页面,在该页面上放置了一个名为“offset”的隐藏字段。我有一个使用 DateTime().getTimezoneOffset() 填充偏移字段的 JQuery 函数。虽然我在 DateTime 对象上看不到任何有用的东西,但也许这会为想法打开其他途径。
【问题讨论】:
-
@Sailing Judo:我在答案中添加了一些代码,它可以让 Javascript 将通用时间戳转换为本地时间戳。
标签: c# javascript timezone utc