web-dev-qa-db-ja.com

Joda DateTime ISODateTimeFormatパターン

Joda ISODateTimeFormat docs say ISODateTimeFormat.dateTime()は、パターンのフォーマッターを返しますyyyy-MM-dd'T'HH:mm:ss.SSSZZ

ただし、フォーマッタは+00:00の代わりに「Z」を返します
これを参照してください-

_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と同じですが、テキスト上は異なります。私が求めているのは、+ 00:00ではなくZを時間オフセットとして配置するパターンです。

(これがあまりにも簡単な場合は申し訳ありません。ミリ秒なしでISO形式を使用したかったので、この質問を書いている最中にISODateTimeFormat.dateTimeNoMillis()で正確に何をしたかを見つけました。興味のためだけに今尋ねる)

19
Dave Pile

そのようなフォーマッターを純粋にパターンから構築できるようには見えません。 DateTimeFormatドキュメントは言う:

ゾーン

  • 'Z'は、コロンなしでオフセットを出力します。
  • 'ZZ'はオフセットをコロンで出力し、
  • 'ZZZ'以上はゾーンIDを出力します。

ほとんどのフォーマッタをパターンから構築し、タイムゾーン出力を次のようにカスタマイズできます。

    DateTimeFormatter patternFormat = new DateTimeFormatterBuilder()
        .appendPattern("yyyy-MM-dd'T'HH:mm:ss.SSS")
        .appendTimeZoneOffset("Z", true, 2, 4)
        .toFormatter();
13
araqnid
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.552Z2014-06-01T03:02:13.552 + 00:と同等です。

コードでゼロ以外のケースを確認するには、

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

TimeZoneが常にDateTimeZone.UTCであることがわかっている場合は、T文字が挿入されたように、パターンにZを挿入できます。このようなもの:

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

同じ形式でミリ秒を使用しない場合、パターンは次のようになります。

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

このページを見つけたと思いますが、これらの形式とその他のオプションの詳細については、 Joda Time Formatting リファレンスページを参照してください。

1
pacifier21

'Z'Zulu time、これはGMTまたはUTCと同じです

これはあなたが必要なものだと思います.. !!

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