Joda DateTime ISODateTimeFormat 模式

2022-09-02 10:24:56

Joda ISODateTimeFormat 文档表示返回模式 y-MM-dd'T'HH:mm:ss 的格式化程序。断续器ISODateTimeFormat.dateTime()

但是格式化程序返回一个“Z”代替+00:00
,请参阅此内容-

DateTime dt = DateTime.now(DateTimeZone.UTC);

DateTimeFormatter patternFormat = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZZ");
DateTimeFormatter isoFormat = ISODateTimeFormat.dateTime();

System.out.println(dt.toString(patternFormat));     //2014-06-01T03:02:13.552+00:00
System.out.println(dt.toString(isoFormat));         //2014-06-01T03:02:13.552Z

谁能告诉我让+00:00打印为Z的模式是什么?

编辑:只是为了澄清 - 我知道“Z”与+00:00相同,但在文本上是不同的。我要问的是,什么模式会将 Z 作为时间偏移,而不是 +00:00

(抱歉,如果这太微不足道了。我想在没有毫秒的情况下使用ISO格式,在编写这个问题的过程中,我发现了我在ISODateTimeFormat.dateTimeNoMillis()中所追求的,所以我现在只是为了兴趣而问)


答案 1

看起来你不能纯粹从模式构建这样的格式化程序。DateTimeFormat文档说:

区域

  • “Z”输出偏移量不带冒号,
  • “ZZ”用冒号输出偏移量,
  • “ZZZ”或更多输出区域 ID。

您可以从模式构建大多数格式化程序,然后自定义时区输出,如下所示:

    DateTimeFormatter patternFormat = new DateTimeFormatterBuilder()
        .appendPattern("yyyy-MM-dd'T'HH:mm:ss.SSS")
        .appendTimeZoneOffset("Z", true, 2, 4)
        .toFormatter();

答案 2
But the formatter returns a "Z" in place of +00:00 see this-

再看一遍文档,它说得很清楚,

The time zone offset is 'Z' for zero, and of the form '±HH:mm' for non-zero.

因此,此 ISO 值 2014-06-01T03:02:13.552Z 等效于 2014-06-01T03:02:13.552+00:00

在代码中要查看非零大小写,请尝试使用

DateTime dt = DateTime.now(); //without arg DateTimeZone.UTC;