【问题标题】:how to convert UTC date-time into ISO 8601 format in Java?如何在 Java 中将 UTC 日期时间转换为 ISO 8601 格式?
【发布时间】:2023-03-15 04:15:01
【问题描述】:

我想以特定的 ISO 8601 格式格式化 UTC 日期时间,例如 2020-02-28T14:10:23+00:00 但不是 2020-02-28T14: 10:23Z。最后我不想要 Z,而是 +00:00。我尝试了simpleDateFormat doc 中的所有格式,但似乎没有任何格式可以提供上述格式。

我知道无论格式如何,两者都代表相同的时间,但出于向后兼容性的原因,它需要像这样格式化。

这是我试过的java代码,

final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(sdf.format(new Date()));

可以通过将格式化字符串中的 z 替换为 +00:00 来实现,但这似乎不是一个好的选择。

【问题讨论】:

标签: java datetime datetime-format iso8601


【解决方案1】:

根据documentation 的DateTimeFormatter

偏移 X 和 x:这会根据模式字母的数量来格式化偏移。一个字母仅输出小时,例如“+01”,除非分钟不为零,在这种情况下也会输出分钟,例如“+0130”。两个字母输出小时和分钟,不带冒号,如'+0130'。 三个字母输出小时和分钟,带冒号,例如'+01:30'。四个字母输出小时和分钟以及可选的秒,不带冒号,例如'+013015'。五个字母输出小时和分钟以及可选的秒,带有冒号,例如'+01:30:15'。六个或更多字母会引发 IllegalArgumentException。当要输出的偏移量为零时,模式字母“X”(大写)将输出“Z”,而模式字母“x”(小写)将输出“+00”、“+0000”或'+00:00'。

用xxx 试试:

DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx").format(ZonedDateTime.now())

返回类似

的东西
2020-02-28T12:42:30+00:00

基于 Java 版本 13,使用jshell OpenJDK 13 测试; DateTimeFormatter 在 Java 8 或更高版本中可用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 2020-11-23
    • 2022-10-15
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    相关资源
    最近更新 更多