您如何确定随机储蓄的任意时区所需的时区偏移



我已经看到了利用当前本地时区的解决方案。如果我正在寻找不是我自己的时区的偏移,目前正在观察日光储蓄时间?

编辑:我意识到很难确切地推断我的要求。

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

示例:用户选择UTC-8,但随后转移到UTC-6的某个地方。我们将显示数据并根据UTC-8偏移量转换。这里的问题是,当日光节省在此时区时,它实际上是UTC-7。根据可用的信息,我可以为UTC-8获得TimeZoneInfo。我知道我可以从TimeZoneInfo.Adjustmentrule中推断出来,以确定我们目前是否正在观察日光节省,以及三角洲。我很好奇框架中是否有东西在重新发明轮之前会为我处理它。

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

您需要使用TimeZoneInfo类。我怀疑您的问题有些错误。偏移通常是名称本身的一部分,通常不是一个非常有趣的事实。它的有用性来自您然后从中推断出来的。

您可能会问:

  • 给定时间x在时区y中,在UTC中几点钟
  • 给定时间x在时区y中,我本地时区几点钟
  • 给定时间x在我的时区中,当地时间将在时区y

这是一个起动器,它给出了第一个:

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更新。

相关内容

  • 没有找到相关文章

最新更新