Aji*_*kar 1 java datetime iso8601 datetime-format
我想以特定的 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()));
Run Code Online (Sandbox Code Playgroud)
可以通过在格式化字符串中用 +00:00 替换 z 来实现,但这似乎不是一个好的选择。
根据文档的DateTimeFormatter
偏移量 X 和 x:这根据模式字母的数量格式化偏移量。一个字母只输出小时,例如“+01”,除非分钟不为零,在这种情况下也会输出分钟,例如“+0130”。两个字母输出小时和分钟,没有冒号,例如“+0130”。三个字母输出小时和分钟,带一个冒号,例如 '+01:30'。四个字母输出小时和分钟以及可选的秒,没有冒号,例如“+013015”。五个字母输出小时和分钟以及可选的秒,带有冒号,例如“+01:30:15”。六个或更多字母抛出 IllegalArgumentException。当要输出的偏移量为零时,模式字母“X”(大写)将输出“Z”,而模式字母“x”.
尝试xxx像在:
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx").format(ZonedDateTime.now())
Run Code Online (Sandbox Code Playgroud)
返回类似的东西
Run Code Online (Sandbox Code Playgroud)2020-02-28T12:42:30+00:00
基于 Java 版本 13,使用jshellOpenJDK 13测试;DateTimeFormatter在 Java 8 或更高版本中可用