“2017-03-29 18:17:12+00”的日期格式是什么

What is the date format for "2017-03-29 18:17:12+00"

我想构造日期“2017-03-29 18:17:12+00”,但在使用格式时得到以下格式,

public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ssZ";

2017-02-28 11:12:31+0000

我需要格式为“2017-03-29 18:17:12+00”。

如何获得这个?格式是什么?

请提供您的意见

尝试 XISO 8601 time zone

public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ssX";

如果你使用JDK 8 java.time API,你会默认得到想要的格式(ISO 8601)

System.out.println(OffsetDateTime.now(ZoneId.systemDefault())); // 2017-05-26T16:20:42.821+05:30

我会确保始终使用 ISO8601。

正如 shazin 所说,您可以用 X 替换 Z 来执行接受日期。

另外,我建议像这样使用 OffsetDateTime API:

OffsetDateTime time = OffsetDateTime.parse( YOUR_DATE_STRING );

这将为您提供一个可用于正确时区的 OffsetDateTime 对象。此外,如果您想将输入转换为您当地的时区或 UTC 时区,您可以使用

time.atZoneSameInstant( ZoneId.systemDefault() );

请注意,并非所有时区都与 UTC 相差整数倍 小时。所以当创建标准时,没有人认为会有 要求将时移打印为仅 2 位数字。

可能这就是为什么 "Z" 作为时移占位符被转换为 “+”或“-”字符,只有 四个 数字。

我认为,解决方案是:

  • 生成带有 4 位时移部分的 data/time 字符串,
  • 截去最后 2 位数字。

但请注意,在某些情况下,例如阿富汗 (4 小时 30 米) 或澳大利亚中部(10 小时 30 分钟),此 2 位时移将不准确。

尝试在格式字符串中使用 X 而不是 Z