当前位置: 首页 > 知识库问答 >
问题:

如何从Java中给定的ZoneOffset中获取ZoneId值?[重复]

赵宏达
2023-03-14

我试图通过给区域偏移量,例如“GMT 2”作为字符串来获得所有的区域ID。然而,我不确定是否可以使用任何Java8库。是否可以获得具有给定分区偏移的所有分区id值?

java中有一个名为getAvailableZoneIds()的方法。时间但不采用偏移参数。

共有1个答案

杨晓博
2023-03-14

如果您想要当前与UTC的偏移量为02:00小时的区域,可以尝试通过GetAvailableZoneId()getRules()getOffset(Instant Instant)进行过滤来收集区域名称(而不是直接ZoneId对象)。后者需要一个参数来定义这种方法所依据的时间
在本例中,现在是⇒ <代码>即时。现在():

public static void main(String[] args) throws Exception {
    // define the desired offset
    ZoneOffset plusTwo = ZoneOffset.ofHours(2);
    // collect all the zones that have this offset at the moment
    List<String> zonesWithPlusTwo = 
            ZoneId.getAvailableZoneIds()
                  .stream()
                  // filter by those that currently have the given offset
                  .filter(zoneId -> ZoneId.of(zoneId)
                                          .getRules()
                                          .getOffset(Instant.now())
                                          .equals(plusTwo))
                  .sorted()
                  .collect(Collectors.toList());
    // print the collected zones
    zonesWithPlusTwo.forEach(System.out::println);
}

今天,2021年8月的第二十五,产量是

Africa/Blantyre
Africa/Bujumbura
Africa/Cairo
Africa/Ceuta
Africa/Gaborone
Africa/Harare
Africa/Johannesburg
Africa/Khartoum
Africa/Kigali
Africa/Lubumbashi
Africa/Lusaka
Africa/Maputo
Africa/Maseru
Africa/Mbabane
Africa/Tripoli
Africa/Windhoek
Antarctica/Troll
Arctic/Longyearbyen
Atlantic/Jan_Mayen
CET
Egypt
Etc/GMT-2
Europe/Amsterdam
Europe/Andorra
Europe/Belgrade
Europe/Berlin
Europe/Bratislava
Europe/Brussels
Europe/Budapest
Europe/Busingen
Europe/Copenhagen
Europe/Gibraltar
Europe/Kaliningrad
Europe/Ljubljana
Europe/Luxembourg
Europe/Madrid
Europe/Malta
Europe/Monaco
Europe/Oslo
Europe/Paris
Europe/Podgorica
Europe/Prague
Europe/Rome
Europe/San_Marino
Europe/Sarajevo
Europe/Skopje
Europe/Stockholm
Europe/Tirane
Europe/Vaduz
Europe/Vatican
Europe/Vienna
Europe/Warsaw
Europe/Zagreb
Europe/Zurich
Libya
MET
Poland

编辑:考虑到@BasilBorque的评论,下面是一个示例方法,它采用两个参数,一个是偏移量的值,另一个是瞬时值,以计算为基础:

public static List<String> getZones(int offsetHours, Instant base) {
    // create the offset
    ZoneOffset offset = ZoneOffset.ofHours(offsetHours);
    // collect all the zones that have this offset at the moment 
    return ZoneId.getAvailableZoneIds()
                 .stream()
                 // filter by those that currently have the given offset
                 .filter(zoneId -> ZoneId.of(zoneId)
                                         .getRules()
                                         .getOffset(base)
                                         .equals(offset))
                 .sorted()
                 .collect(Collectors.toList());
}

您可以创建一个局部变量(可能是一个类成员),以便将其传递给方法。这将减少对Instant的调用量。now()并允许您使用与调用该方法时不同的即时s。

 类似资料:
  • 问题内容: 我如何平均?我想找到的平均值,学生总数和的总数。例: 输入 :4 4 4 4 产出: 学生总数 :4 总GPA :16 平均GPA: 4 问题答案: 如果问题是您得到错误的答案,则原因是此循环: 大概您打算在用户输入负数时退出循环。这样做有问题,它将在总数和计数中包含负数。您可以这样重写循环: (其他解决方案也是可能的)。在代码的后面,您将需要防止第一个数字为负。如果发生这种情况,将为

  • 问题内容: 使用Java,我有一个实例,该实例具有GMT偏移量和来自旧系统的夏令时信息。 我希望能够使用Java 8时间API。 实际上,返回没有夏令时信息的 问题答案: 这里我喜欢的解决方案是因为它很简单,但是您需要一个Date和一个TimeZone作为参数来检索ZoneId

  • 我需要在输入用户的邮件时获取用户ID。 有可能吗? 当然,我有一个经过身份验证的用户,他正在询问已经创建的用户的邮件。 我想检索像这样的用户 但以一种可能的方式。

  • 如果条件匹配,我想从多数组中获取变量的特定值。 打印阵列时: 给出如下数组: 如果ID与21匹配,我正在尝试获取客户号码

  • 我在Eclipse中获得了一个Hashmap条目,如下所示: 链接到hashmap输出的图片 我无法使用键=“value”获取值。我收到的错误是:java。lang.ClassCastException:类java。无法将lang.Double转换为java类。util。Map(java.lang.Double和java.util.Map位于加载程序“bootstrap”的模块java.base中

  • 我对编程很陌生,我想做一个程序,用不同的变量发出12张卡片,然后将每张完整的卡片存储在某个地方供以后使用: N=Number(卡片上的数字,可以从1到3) C=Color(卡片是什么颜色,绿色、蓝色或红色) F=Form(有3种形式:蛇、时钟和圆) R=Fill(可以是满的、半的或空的) 这是我到目前为止得到的: