有没有一种方法可以在C#中输入UTC的时区偏移量并计算时区?

4

我正在调用一个服务,该服务可以标准化给定的地址,并给出UTC偏移量下的时区(例如:-5:00等)。

在C#中是否有一个函数,可以接受UTC的时区偏移量并计算时区(三个字符,例如CST、EST、PST)?


4
请注意 - 将偏移转换为时区是不可能的 - 一些时区与偏移重叠,而且偏移量不符合夏令时。 - BillyBigPotatoes
2个回答

7

不可能用任何语言实现这个请求,因为:

  1. 许多不同的时区共享相同的偏移量。

  2. 没有关于时区缩写的标准。存在大量重叠和歧义。例如,“CST”至少有五种不同的含义。

  3. 即使你限制在美国境内,也无法可靠地区分偏移量。例如,-5可能是东部标准时间(EST),也可能是中部夏令时(CDT)。

    甚至每年还有一小时,EST和CDT同时生效,并且两者都使用UTC-5偏移量。例如,这发生在2014年11月2日,当时1:00 AM EST和1:00 AM CDT 同时生效,并且都使用了UTC-5偏移量。

我正在调用一个服务,该服务标准化给定地址并提供结果的UTC偏移量(例如:-5:00等)的时区。

除非该服务返回了一个特定日期和时间的偏移量,否则它可能在向您撒谎。也许它正在返回当前偏移量,但这并不是固定的。同一位置可以循环多个不同的偏移量。
我认为,像那样的服务不应该尝试解析偏移量,而应该返回时区标识符,例如"America/New_York"。
您应该阅读时区标签wiki,您可能还会对这篇文章感兴趣。

你说得对,没有官方的缩写列表。不过,TimeZoneInfo.GetSystemTimeZones会从Windows注册表中给出时区列表。虽然TimeZoneInfo没有问题中指定的缩写,但它们有一个DisplayName和StandardName。 - Mick
@Mick。是的,StackOverflow上有很多关于这个问题的其他问题。但我不明白它与所提出的问题有什么关系。 - Matt Johnson-Pint
@ Matt,我已经联系了我们的地址服务提供商,根据他们的说法,偏移量是在给定时间计算的。我们使用的这项服务仅限于美国。我们有一个数据库表,用于维护每年的夏令时。请告诉我是否有任何帮助我通过将结果限制在美国来计算时区的方法。 - Sat
1
如我在我的回答中的第三点所说,它仍然不太可靠。请考虑以下情况:如果您得到一个“-05:00”的结果,并且恰好是2014年11月2日从早上1点到1点59分59秒之间。在这种情况下,“-05:00”可以是美国东部标准时间(EST)或中部夏令时(CDT)。请参阅此处以获取确认。这是因为在美国,夏令时不会同时发生。每个时区都在自己的当地时间进行切换,这会产生相邻时区共享相同时间的一小时,并且它们相隔2个小时而不是1小时的一小时。 - Matt Johnson-Pint
2
还要考虑到太平洋时区在夏令时使用“-07:00”,但亚利桑那州的大部分地区(位于山地时区)不使用夏令时,全年偏移量为“-07:00”。因此,如果您在夏季从服务中获取到“-07:00”的值,那么它可能表示太平洋日光时间(PDT)或山地标准时间(MST)。 - Matt Johnson-Pint
显示剩余3条评论

-1
如果有机会在C#中实现这个功能,我认为NODA Time可以做到。

Noda很好,但这里没有魔法。你可以获取时区的偏移量,但不能根据偏移量获取时区。 - Matt Johnson-Pint

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