Java 时区 - 获取美国或加拿大的时区

Java Timezones - Get Timezones in US or Canada

提问人:AJS 提问时间:11/3/2023 更新时间:11/5/2023 访问量:82

问:

有没有办法过滤掉 TimeZoneID 以仅包含与美国或加拿大关联的时区?

https://docs.oracle.com/javase/7/docs/api/java/util/TimeZone.html

我使用 TimeZone.getAvailableIDs() 返回所有可用的 ID。我可以根据它们是否包括“美国”或“加拿大”来过滤它们,但这包括一些不适用于我的申请的时区。

爪哇 时区

评论

1赞 Andy Turner 11/3/2023
数量不多(12 个左右,如果你想包括海外领土?),只需手动列出即可。
0赞 Sören 11/3/2023
@AndyTurner 我仅美国就数了 29 个(en.wikipedia.org/wiki/List_of_tz_database_time_zones,按国家代码排序,忽略链接)
0赞 Andy Turner 11/3/2023
@Sören根据 en.wikipedia.org/wiki/Time_in_the_United_States,有 11 个由 15 USC 260 定义。
2赞 Sören 11/3/2023
@AndyTurner 这是当前的时区。时区数据库(由 Java 使用)也包括历史差异。
3赞 Basil Bourque 11/4/2023
TimeZone是一个遗留类,几年前被现代 java.time 类所取代,在 JSR 310 中定义,并内置于 Java 8+ 中。而是使用 and。对于 Java 6 和 7,请使用 ThreeTen-Backport 库。java.time.ZoneIdZoneOffset

答:

0赞 Reilas 11/4/2023 #1

"...我可以根据它们是否包括“美国”或“加拿大”来过滤它们,但这包括一些不适用于我的申请的时区。

您需要继续过滤器;哪些时区不适用?

这是维基百科上关于“时区”数据库的文章。
维基百科 – Tz_database

此外,如果您使用的是 Unix 系统,通常可以在 /usr/share/zoneinfo/ 文件夹中找到该数据库

而且,这是时区区域的高分辨率图像。
维基媒体 – World_Time_Zones_Map.png

您可以尝试按偏移值进行筛选,如果这样可以提高精度。

Stream.of(TimeZone.getAvailableIDs())
      .filter(x -> {
          int v = TimeZone.getTimeZone(x).getRawOffset();
          return v >= -9 * 3_600_000 && v <= -5 * 3_600_000;
      });

下面是一个排序的输出。

AST
America/Anchorage
America/Atikokan
America/Bahia_Banderas
America/Belize
America/Bogota
America/Boise
America/Cambridge_Bay
America/Cancun
America/Cayman
America/Chicago
America/Chihuahua
America/Ciudad_Juarez
America/Coral_Harbour
America/Costa_Rica
America/Creston
America/Dawson
America/Dawson_Creek
America/Denver
America/Detroit
America/Edmonton
America/Eirunepe
America/El_Salvador
America/Ensenada
America/Fort_Nelson
America/Fort_Wayne
America/Grand_Turk
America/Guatemala
America/Guayaquil
America/Havana
America/Hermosillo
America/Indiana/Indianapolis
America/Indiana/Knox
America/Indiana/Marengo
America/Indiana/Petersburg
America/Indiana/Tell_City
America/Indiana/Vevay
America/Indiana/Vincennes
America/Indiana/Winamac
America/Indianapolis
America/Inuvik
America/Iqaluit
America/Jamaica
America/Juneau
America/Kentucky/Louisville
America/Kentucky/Monticello
America/Knox_IN
America/Lima
America/Los_Angeles
America/Louisville
America/Managua
America/Matamoros
America/Mazatlan
America/Menominee
America/Merida
America/Metlakatla
America/Mexico_City
America/Monterrey
America/Montreal
America/Nassau
America/New_York
America/Nipigon
America/Nome
America/North_Dakota/Beulah
America/North_Dakota/Center
America/North_Dakota/New_Salem
America/Ojinaga
America/Panama
America/Pangnirtung
America/Phoenix
America/Port-au-Prince
America/Porto_Acre
America/Rainy_River
America/Rankin_Inlet
America/Regina
America/Resolute
America/Rio_Branco
America/Santa_Isabel
America/Shiprock
America/Sitka
America/Swift_Current
America/Tegucigalpa
America/Thunder_Bay
America/Tijuana
America/Toronto
America/Vancouver
America/Whitehorse
America/Winnipeg
America/Yakutat
America/Yellowknife
Brazil/Acre
CST
CST6CDT
Canada/Central
Canada/Eastern
Canada/Mountain
Canada/Pacific
Canada/Saskatchewan
Canada/Yukon
Chile/EasterIsland
Cuba
EST
EST5EDT
Etc/GMT+5
Etc/GMT+6
Etc/GMT+7
Etc/GMT+8
Etc/GMT+9
IET
Jamaica
MST
MST7MDT
Mexico/BajaNorte
Mexico/BajaSur
Mexico/General
Navajo
PNT
PST
PST8PDT
Pacific/Easter
Pacific/Galapagos
Pacific/Gambier
Pacific/Pitcairn
SystemV/CST6
SystemV/CST6CDT
SystemV/EST5
SystemV/EST5EDT
SystemV/MST7
SystemV/MST7MDT
SystemV/PST8
SystemV/PST8PDT
SystemV/YST9
SystemV/YST9YDT
US/Alaska
US/Arizona
US/Central
US/East-Indiana
US/Eastern
US/Indiana-Starke
US/Michigan
US/Mountain
US/Pacific

评论

0赞 Sören 11/4/2023
这仍然有很多拉丁美洲。