Joda DateTime ISODateTimeFormat模式

时间:2014-06-02 04:25:09

标签: java datetime jodatime

Joda ISODateTimeFormat文档说 ISODateTimeFormat.dateTime()会返回格式函数 yyyy-MM-dd'T'HH:mm:ss.SSSZZ

但格式化程序返回“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()中找到了正确的内容,所以我现在只是为了利益而要求)

干杯

4 个答案:

答案 0 :(得分:10)

您似乎无法完全从模式构建这样的格式化程序。 DateTimeFormat文档说:

* <strong>Zone</strong>: 'Z' outputs offset without a colon, 'ZZ' outputs
* the offset with a colon, 'ZZZ' or more outputs the zone id.

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

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

答案 1 :(得分:3)

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;

答案 2 :(得分:0)

'Z'Zulu time的短期内容,与GMTUTC相同

我认为这就是你需要的...... !!

int offset = DateTimeZone.forID("UTC").getOffset(new DateTime());

答案 3 :(得分:0)

If you know that your TimeZone will always be DateTimeZone.UTC, then you can inject the Z in the pattern just like the T character has been injected. Something like this:

DateTimeFormatter patternFormat = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");

If you want to have the same format but without the milliseconds, the pattern might look something like this:

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

I am sure you have found this page, but see the Joda Time Formatting reference page for details regarding these formats and other options.