【问题标题】:Java 8: how to derive a ZoneId from ZoneOffsetJava 8:如何从 ZoneOffset 派生 ZoneId
【发布时间】:2015-10-04 09:12:57
【问题描述】:

我正在阅读API for the ZoneId 课程。它指出ID的三个提示:

  1. 派生自 ZoneOffset
  2. 带有某种形式前缀的偏移样式 ID。例子:

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

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

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

[来自 ZoneOffset 的 ID] 由“Z”和以“+”或“-”开头的 ID 组成。

我应该使用 String 和 ZoneOffset 对象的组合来创建第一类 ZoneId

【问题讨论】:

  • Erm...也许我没有抓住重点,但文档明确指出前缀必须是“GMT”、“UTC”或“UT”或“”中的一个,并且ZoneOffset.of() 工厂方法需要一个偏移id,其格式也明确指定。所以如果你想创建UTC+2,我想你应该使用“UTC”作为前缀,“+2”作为ZoneOffset的偏移id .of() ?
  • @ZaphodBeeblebrox 适合第二种 ID。我编辑了我的问题以包含部分答案,它可能对将来的读者有用
  • @LuigiCortese 请发布您自己的答案作为答案。完全可以接受并鼓励回答您自己的问题。
  • @BasilBourque 编辑了我的问题并发布了答案。就像和自己对话一样 =)

标签: java date java-8


【解决方案1】:

这里其实有两个问题需要回答

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

就是这样:

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

here你可以找到完整列表

  • Z - 用于 UTC
  • +h
  • +hh
  • +hh:mm
  • -hh:mm
  • +嗯嗯
  • -hhmm
  • +hh:mm:ss
  • -hh:mm:ss
  • +hhmmss
  • -hhmmss

我错了

'Z' AND 以“+”或“-”开头的 ID

意味着您总是需要一个 Z 前缀(以编写类似 Z+02:00 的内容)。我认为 OR 会更合适。

2) String 和ZoneOffset 对象的[需要] 组合是什么?

无需组合,您可以使用字符串或ZoneOffset 对象:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-25
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 2018-09-19
    • 1970-01-01
    • 2018-02-23
    相关资源
    最近更新 更多