繁体   English   中英

如何通过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时区(而不是那些可能在一年中其他时间的时区)。

是的,你可以做到,看看这个。

final List<ZoneId> timeZoneByUtc = ZoneId.getAvailableZoneIds().stream().map(ZoneId::of)
        .filter(z -> z.getRules().getOffset(Instant.now()).equals(ZoneOffset.ofHours(-5)))
        .collect(Collectors.toList());
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]);
        }
    }
}

开/关

美国/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进行比较。

快乐编码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM