如何通过 utc 偏移获取时区?
How to get timezone by utc offset?
我有 UTC 偏移量 -05:00,我想通过偏移量获取时区名称。
ZoneOffset offset = ZoneOffset.of("-05:00");
System.out.println(offset.getId()); //prints -05:00
我想得到这样的结果:
America/Chicago
America/Eirunepe
Etc/GMT+5
Mexico/General
...
我现在想要偏移 -05:00
的时区(而不是一年中其他时间的时区)。
public class Main {
public static void main(String[] args) {
TimeZone tz = TimeZone.getTimeZone("GMT-05:00");
String a[] = TimeZone.getAvailableIDs(tz.getOffset(System.currentTimeMillis()));
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
}
O/P
America/Atikokan
America/Bogota
America/Cancun
America/Cayman
America/Coral_Harbour
America/Detroit
America/Eirunepe
America/Fort_Wayne
America/Grand_Turk
America/Guayaquil
America/Havana
...
首先确定什么时候是“现在”:使用Instant.now()
(如果你想要一个一致的答案,只调用一次Instant.now()
)。
然后遍历所有可用时区并包括现在偏移量为 -05:00 的时区。首先从 ZoneId.getAvailableZoneIds()
中获取可用的时区 ID 作为字符串。对于每个从 ZoneId.of(String)
获取相应的 ZoneId
对象。现在有不同的方法可以获得偏移量。一个是 yourZoneId.getRules().getOffset(rightNow)
(其中 rightNow
是您的 Instant
)。这为您提供了一个 ZoneOffset
对象,您可以使用 .equals(Object)
.
将其与问题中的 offset
进行比较
是的,你可以做到,看看这个。
final List<ZoneId> timeZoneByUtc = ZoneId.getAvailableZoneIds().stream().map(ZoneId::of)
.filter(z -> z.getRules().getOffset(Instant.now()).equals(ZoneOffset.ofHours(-5)))
.collect(Collectors.toList());
我有 UTC 偏移量 -05:00,我想通过偏移量获取时区名称。
ZoneOffset offset = ZoneOffset.of("-05:00");
System.out.println(offset.getId()); //prints -05:00
我想得到这样的结果:
America/Chicago
America/Eirunepe
Etc/GMT+5
Mexico/General
...
我现在想要偏移 -05:00
的时区(而不是一年中其他时间的时区)。
public class Main {
public static void main(String[] args) {
TimeZone tz = TimeZone.getTimeZone("GMT-05:00");
String a[] = TimeZone.getAvailableIDs(tz.getOffset(System.currentTimeMillis()));
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
}
O/P
America/Atikokan America/Bogota America/Cancun America/Cayman America/Coral_Harbour America/Detroit America/Eirunepe America/Fort_Wayne America/Grand_Turk America/Guayaquil America/Havana ...
首先确定什么时候是“现在”:使用Instant.now()
(如果你想要一个一致的答案,只调用一次Instant.now()
)。
然后遍历所有可用时区并包括现在偏移量为 -05:00 的时区。首先从 ZoneId.getAvailableZoneIds()
中获取可用的时区 ID 作为字符串。对于每个从 ZoneId.of(String)
获取相应的 ZoneId
对象。现在有不同的方法可以获得偏移量。一个是 yourZoneId.getRules().getOffset(rightNow)
(其中 rightNow
是您的 Instant
)。这为您提供了一个 ZoneOffset
对象,您可以使用 .equals(Object)
.
offset
进行比较
是的,你可以做到,看看这个。
final List<ZoneId> timeZoneByUtc = ZoneId.getAvailableZoneIds().stream().map(ZoneId::of)
.filter(z -> z.getRules().getOffset(Instant.now()).equals(ZoneOffset.ofHours(-5)))
.collect(Collectors.toList());