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()
で正確に何をしたかを見つけました。興味のためだけに今尋ねる)
そのようなフォーマッターを純粋にパターンから構築できるようには見えません。 DateTimeFormatドキュメントは言う:
ゾーン:
- 'Z'は、コロンなしでオフセットを出力します。
- 'ZZ'はオフセットをコロンで出力し、
- 'ZZZ'以上はゾーンIDを出力します。
ほとんどのフォーマッタをパターンから構築し、タイムゾーン出力を次のようにカスタマイズできます。
DateTimeFormatter patternFormat = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd'T'HH:mm:ss.SSS")
.appendTimeZoneOffset("Z", true, 2, 4)
.toFormatter();
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:と同等です。
コードでゼロ以外のケースを確認するには、
DateTime dt = DateTime.now(); //without arg DateTimeZone.UTC;
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 リファレンスページを参照してください。
'Z'
はZulu time
、これはGMT
またはUTC
と同じです
これはあなたが必要なものだと思います.. !!
int offset = DateTimeZone.forID("UTC").getOffset(new DateTime());