如何在Java中将UTC日期时间转换为ISO 8601格式?

如何在Java中将UTC日期时间转换为ISO 8601格式?,java,datetime,datetime-format,iso8601,Java,Datetime,Datetime Format,Iso8601,我想以特定的ISO 8601格式格式化UTC日期时间,如2020-02-28T14:10:23+00:00,但不是2020-02-28T14:10:23Z。我不想让Z在结尾,而是+00:00。我尝试了所有的格式,但似乎没有一种格式能给出上面提到的格式 我知道无论格式如何,两者都表示相同的时间,但出于向后兼容性的原因,需要将其格式化为那样 这是我试过的java代码 final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:

我想以特定的ISO 8601格式格式化UTC日期时间,如2020-02-28T14:10:23+00:00,但不是2020-02-28T14:10:23Z。我不想让Z在结尾,而是+00:00。我尝试了所有的格式,但似乎没有一种格式能给出上面提到的格式

我知道无论格式如何,两者都表示相同的时间,但出于向后兼容性的原因,需要将其格式化为那样

这是我试过的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来实现,但这似乎不是一个好选项

根据
DateTimeFormatter

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

尝试使用
xxx
类似于:

模式的DateTimeFormatter.of(“yyyy-MM-dd'T:MM:ssxxx”).format(ZonedDateTime.now()) 它返回类似于

基于Java版本13,使用
jshell
OpenJDK 13进行测试
DateTimeFormatter
在Java 8或更高版本中提供

根据
DateTimeFormatter

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

尝试使用
xxx
类似于:

模式的DateTimeFormatter.of(“yyyy-MM-dd'T:MM:ssxxx”).format(ZonedDateTime.now()) 它返回类似于


基于Java版本13,使用
jshell
OpenJDK 13进行测试
DateTimeFormatter
在Java 8或更高版本中提供

@并且Turner是的,它是一种正确的格式。你可以说这有帮助吗?也许?它看起来像是您要求的格式。@user85421谢谢您的评论,但它给出的结果类似于2020-02-28014:10:23+0000,没有:在中间。您不应该使用过时的
Date
SimpleDateFormat
类。使用较新的日期和时间API(来自
java.Time
包)。@AndyTurner是的,它是正确的格式。你可以说这有帮助吗?也许?它看起来像是您要求的格式。@user85421谢谢您的评论,但它给出的结果类似于2020-02-28014:10:23+0000,没有:在中间。您不应该使用过时的
Date
SimpleDateFormat
类。使用更新的日期和时间API(来自
java.Time
包)。
2020-02-28T12:42:30+00:00