提问人:AJS 提问时间:11/3/2023 更新时间:11/5/2023 访问量:82
Java 时区 - 获取美国或加拿大的时区
Java Timezones - Get Timezones in US or Canada
问:
有没有办法过滤掉 TimeZoneID 以仅包含与美国或加拿大关联的时区?
https://docs.oracle.com/javase/7/docs/api/java/util/TimeZone.html
我使用 TimeZone.getAvailableIDs() 返回所有可用的 ID。我可以根据它们是否包括“美国”或“加拿大”来过滤它们,但这包括一些不适用于我的申请的时区。
答:
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
这仍然有很多拉丁美洲。
评论
TimeZone
是一个遗留类,几年前被现代 java.time 类所取代,在 JSR 310 中定义,并内置于 Java 8+ 中。而是使用 and。对于 Java 6 和 7,请使用 ThreeTen-Backport 库。java.time.ZoneId
ZoneOffset