Java 8:如何从ZoneOffset推导出ZoneId

11

我正在阅读ZoneId类的API文档。文档指出,有三种类型的ID:

  1. 派生自ZoneOffset的ID。
  2. 带有某种类型前缀的偏移式ID。例如:

  3. ZoneId.of("GMT+2");
    ZoneId.of("UTC");
    ZoneId.of("UT+01:00");
    
  4. 基于区域。例如:

    ZoneId.of("Asia/Aden");
    ZoneId.of("Etc/GMT+9");
    ZoneId.of("Asia/Aqtau");
    

但是第一种的正确语法是什么?文档说明:

[来自 ZoneOffset 的 ID] 包括以 '+' 或 '-' 开头的 ID,以及 'Z'。

我应该使用哪种字符串和 ZoneOffset 对象的组合来创建第一种类型的 ZoneId


嗯...也许我没有理解到点,但是文档明确说明前缀必须是""GMT"、"UTC"或"UT"之一,或者为空,而ZoneOffset.of()工厂方法接受一个偏移量id,其格式也已经清楚地指定了。所以如果你想创建UTC+2,我猜你应该使用"UTC"作为前缀,并将"+2"作为偏移量id传递给ZoneOffset.of()? - Zaphod Beeblebrox
1
@ZaphodBeeblebrox 这对于第二种ID是正确的。我编辑了我的问题,包括答案的一部分,这可能对未来的读者有用。 - Luigi Cortese
@LuigiCortese请将您自己的答案发布为答案。回答自己的问题是完全可以接受和鼓励的。 - Basil Bourque
@BasilBourque编辑了我的问题并发布了答案。就像和自己对话一样 =) - Luigi Cortese
1个回答

18

实际上有两个问题需要回答:

1)第一种的正确语法是什么?

就是这个:

    ZoneId z;
    z = ZoneId.of("Z"); //for UTC
    z = ZoneId.of("+02:00"); 
    z = ZoneId.of("-02:00"); 

这里 可以找到完整列表

  • Z - 代表 UTC
  • +h
  • +hh
  • +hh:mm
  • -hh:mm
  • +hhmm
  • -hhmm
  • +hh:mm:ss
  • -hh:mm:ss
  • +hhmmss
  • -hhmmss

我曾错误地认为:

'Z' 以 '+' 或 '-' 开头的 ID

意味着你始终需要一个前缀 Z(来组合类似 Z+02:00 的内容)。我认为使用 更加合适。

2) 字符串与 ZoneOffset 对象的组合方式?

不需要任何组合,您可以使用字符串或 ZoneOffset 对象:

    ZoneId z;
    z = ZoneId.of("+02:00"); 
    z = ZoneId.of(ZoneOffset.of("+02:00").getId());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接