TimeZoneInfo.GetSystemTimeZones()如何仅选择特定国家/地区代码的条目?

时间:2011-04-29 01:58:05

标签: c# .net asp.net

TimeZoneInfo.GetSystemTimeZones()为您提供所有时区的枚举。问题是如何仅选择特定国家/地区代码的条目。我知道UTC偏移和国家代码,需要能够选择正确的时区值。

2 个答案:

答案 0 :(得分:6)

首先,您会发现由于夏令时变化(可能是其他区域偏差),您不能简单地使用UTC偏移。也许如果您提供的UTC偏移量是当前偏移量,并且您经常轮询它,您可以使用它吗?

无论如何,由于这些原因(你无疑已经知道),我认为国家代码+ UTC并不容易:

  1. 时区与国家/地区有多对多的关系

    虽然“东京标准时间”很可能只是日本(或者至少,“JP”和UTC + 9:00可以令人满意地给你东京标准时间),那么“中亚标准时间”呢?当然,如果你有一个每个国家/地区到每个时区的地图,你可能会到达这里的某个地方。

  2. 同一国家/地区的同一UTC偏移可以产生不同的时区

    例如,在澳大利亚,昆士兰州(布里斯班)不遵守夏令时,而其他东部州则不遵守夏令时。这会产生“E. Australia标准时间”和“AUS东部标准时间”作为具有相同国家和UTC偏移的单独时区。

  3. UTC之后通常会出现区域差异

    由于它们的相关性较低(我不确定你的用例是多么精确),这些可能不是你关心的问题,但是在多个时区的边界上存在诸如城镇之类的异常,这对于“平均UTC”而言是妥协的“或类似的。一个例子是“中西部标准时间”(http://basementgeographer.blogspot.com/2010/07/central-western-standard-time-time-zone.html)。

  4. 但是,您可能会发现这个感兴趣的现有问题(Country to Timezone mapping database),从而产生此链接(http://www.twinsun.com/tz/tz-link.htm)。假设您有足够的提供信息,您可以使用此数据解析时区,或者至少是最佳猜测(或可能选项中的查询用户?),如果这仍然有用/可能。

答案 1 :(得分:0)

Linq魔法怎么样?

var zones = from tz in TimeZoneInfo.GetSystemTimeZones() where tz.Id = "xxx" select tz;

将“xxx”替换为您想要的时区......:)