如何将ZoneOffset UTC返回的“Z”改为“+00:00”?

8
有没有 Java 中的内置方法可以返回 ZoneOffset UTC 的 "+00:00" 值?getId() 方法只会返回 "Z"
我的当前解决方案是,如果结果为 "Z",则手动更改为 "+00:00"
public static String getSystemTimeOffset() {
    String id = ZoneOffset.systemDefault().getRules().getOffset(Instant.now()).getId();
    return "Z".equals(id) ? "+00:00" : id;
}

不,它遵循ISO-8601标准。 - nitnamby
2
根据ISO 8601,+00:00也是一种选项。它包含了相当多的自由度,有时比java.time API能处理的还要多(我相信它可以很好地解析+00:00)。 - Ole V.V.
1个回答

12
private static DateTimeFormatter offsetFormatter = DateTimeFormatter.ofPattern("xxx");

public static String getSystemTimeOffset() {
    ZoneOffset offset = ZoneId.systemDefault().getRules().getOffset(Instant.now());
    return offsetFormatter.format(offset);
}

原来,ZoneOffset 可以像日期时间对象一样进行格式化(除了没有 ZoneOffset.format 方法,所以我们需要使用 DateTimeFormatter.format 方法并传递时区偏移量)。因此,这只是阅读 DateTimeFormatter 的文档的问题。有许多格式模式字母可用于格式化偏移量:OXxZ。对于每个字母,放入格式中的数量都很重要。大写的 X 会给你不想要的 Z,因此我们可以跳过它。示例似乎表明,我们可以在这里使用小写的 x 或大写的 Z。对于 x,“三个字母输出小时和分钟,带有冒号,例如 '+01:30'。” Bingo。
链接:DateTimeFormatter 文档

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