PSTオフセット付きのタイムスタンプを出力したい(例:2008-11-13T13:23:30-08:00)。 Java.util.SimpleDateFormat
は、タイムゾーンのオフセットをhour:minute形式で出力しないようです。コロンは除外されます。 Javaでそのタイムスタンプを取得する簡単な方法はありますか?
// I want 2008-11-13T12:23:30-08:00
String timestamp = new SimpleDateFormat("yyyy-MM-dd'T'h:m:ssZ").format(new Date());
System.out.println(timestamp);
// prints "2008-11-13T12:23:30-0800" See the difference?
また、SimpleDateFormat
は上記の例を適切に解析できません。 ParseException
をスローします。
// Throws a ParseException
new SimpleDateFormat("yyyy-MM-dd'T'h:m:ssZ").parse("2008-11-13T13:23:30-08:00")
Java 7から始まり、ISO8601タイムゾーンのX
パターン文字列があります。記述した形式の文字列については、XXX
を使用してください。 ドキュメント 。
サンプル:
System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX")
.format(new Date()));
結果:
2014-03-31T14:11:29+02:00
Joda Time パッケージをチェックしてください。これにより、RFC 3339の日付の書式設定が大幅に容易になります。
ジョーダの例:
DateTime dt = new DateTime(2011,1,2,12,45,0,0, DateTimeZone.UTC);
DateTimeFormatter fmt = ISODateTimeFormat.dateTime();
String outRfc = fmt.print(dt);
"get it done dept"からの1つの解決策は、SimpleDateFormatの完了後に正規表現を使用して文字列を修正することです。 Perlではs /(\ d {2})(\ d {2})$/$ 1:$ 2 /のようなもの。
これにリモートで興味がある場合は、動作するJavaコードでこの応答を編集します。
しかし、そうです。私もこの問題に直面しています。 RFC3339、私はあなたを見ています!
編集:
これは私のために働く
// As a private class member
private SimpleDateFormat rfc3339 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
String toRFC3339(Date d)
{
return rfc3339.format(d).replaceAll("(\\d\\d)(\\d\\d)$", "$1:$2");
}
私は同じ問題の答えを探すためにかなりの時間を費やし、ここで何かを見つけました: http://developer.Android.com/reference/Java/text/SimpleDateFormat.html
推奨される回答:
String timestamp = new SimpleDateFormat("yyyy-MM-dd'T'h:m:ssZZZZZ").format(new Date());
気づいたら、私は1つではなく5つの「Z」を使用しています。これにより、「2008-11-13T12:23:30-08:00」のように、オフセットにコロンが付いた出力が得られます。それが役に立てば幸い。
問題は、Zが区切り文字としてコロン(:)なしでタイムゾーンオフセットを生成することです。
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'h:m:ss.SZ");
あなたが正確に必要なものではありませんか?
この問題を解決するために迷子のペーストビンを見つけました: http://Pastebin.com/y3TCAikc
後でその内容が削除される場合に備えて:
// I want 2008-11-13T12:23:30-08:00
String timestamp = new SimpleDateFormat("yyyy-MM-dd'T'h:m:ssZ").format(new Date());
System.out.println(timestamp);
// prints "2008-11-13T12:23:30-0800" See the difference?
// Throws a ParseException
new SimpleDateFormat("yyyy-MM-dd'T'h:m:ssZ").parse("2008-11-13T13:23:30-08:00")
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'h:m:ss.SZ");