如果时区设置为“UTC”,SimpleDateFormat会忽略“XXX”。

12

我想要以UTC格式输出当前日期时间,格式如下: 2016-01-11T14:08:42+00:00

final SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));

final String dateString = formatter.format(new Date());

"dateString" 应该包含 "2016-01-11T14:08:42+00:00",但它包含 "2016-01-11T14:08:42Z"。

如果没有设置 "UTC" 时区,我可以得到正确的格式,但是 - 当然 - 在我的特定时区...

有什么想法吗?

1个回答

18

查看SimpleDateFormat文档:

对于使用ISO 8601时区格式的格式化,如果与GMT的偏移量为0,则会生成“Z”。

所以,这种行为是可以预料到的。

您可以选择:

  • 使用RFC 822时区格式:ZZZ;但是,这会产生"+0000"
  • 操作字符串以替换最后一个Zstr.replaceAll("Z$", "+00:00")

我认为我的方法可能是“错误”的。我会尝试使用“Z”,因为它似乎是标准。谢谢! - eventhorizon
1
@eventhorizon 我不认为你的方法一定是错的;我发现使用 Z 而不是 +00:00 是一种意外的行为。我相信这个决定背后有一个好的意图,只是我不确定它可能是什么。然而,坚持使用 Z 可能会更容易。 - Andy Turner
1
@eventhorizon 中的 Z 是 ISO-8601 标准中正式定义的 UTC+00:00 符号。可能字母 Z 最初来自美国军方的用法(Z=Zulu)。 - Meno Hochschild

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