首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据夏令时确定任意时区所需的时区偏移量

如何根据夏令时确定任意时区所需的时区偏移量
EN

Stack Overflow用户
提问于 2018-04-04 06:45:10
回答 1查看 156关注 0票数 0

我见过利用当前本地时区的解决方案。如果我正在寻找一个时区的偏移量,而这个时区不是我自己的,并且当前遵循的是夏令时,该怎么办?

编辑:我意识到很难准确推断出我所要求的是什么。

目前,当用户在系统中设置时,他们会选择一个时区。我们所有的数据都会转换成他们选择的时区(使用偏移量)。

示例:用户选择UTC-8,但随后转到UTC-6。我们将显示数据并根据UTC-8偏移量进行转换。这里的问题是,当夏令时应用到这个时区时,它实际上是UTC-7。根据可用的信息,我能够获得UTC-8的TimeZoneInfo。我知道我可以根据TimeZoneInfo.AdjustmentRule来推断,以确定我们是否正在观察夏令时,以及增量是什么。我很好奇,在重新发明轮子之前,框架中是否有我遗漏的东西可以帮我处理这个问题。

注意:这是一个web应用程序。TimeZoneInfo在服务器端收集,并向下传递用户的偏移量,因此我们可以将其转换为用户选择的时区首选项。我同意如果用户的浏览器客户端提供他们的系统时区会更容易,但是(由于业务规则)使用浏览器的时区是不可行的,因为用户希望根据他们选择的时区查看信息。

EN

回答 1

Stack Overflow用户

发布于 2018-04-04 07:17:53

您需要使用TimeZoneInfo类。我怀疑你的问题有点用词不当。偏移量通常是名称本身的一部分,它本身通常不是一个非常有趣的事实。它的有用性来自于你打算从中推断出的东西。

你可能会问:

  • 给定时区Y中的时间X,在UTC
  • 中给定时区Y中的时间X,在我的本地时区
  • 中给定的时间X在我的时区中,在我的时区Y

中是什么时间

这里有一个启动器,它提供了第一个:

代码语言:javascript
复制
public static DateTime ConvertToUtc(DateTime timeOfInterest, string timezoneId)
{
    TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById(timezoneId);
    if (tz.IsInvalidTime(timeOfInterest))
    {
        // Timezones with DST will be missing (usually) an hour one day a year, so some timeOfInterest
        // values are not valid
        throw new ArgumentOutOfRangeException($"{timeOfInterest} is not a valid time in {timezoneId} timezone");
    }
    return TimeZoneInfo.ConvertTimeToUtc(timeOfInterest, tz);
}

如果您愿意,您甚至可以将其作为扩展方法。

有关其他函数,另请参阅:

  • tz.IsDaylightSavingTime()
  • tz.GetUtcOffset()
  • tz.SupportsDaylightSavingTime
  • TimeZoneInfo.ConvertTimeFromUtc()
  • TimeZoneInfo.ConvertTime()

最后,请注意,这些规则一直在变化,因为不同的司法辖区会根据他们遵守的时间改变他们的法律。确保正在执行这些计算的任何系统都能获得windows更新。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49640162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档