Javaでは、SimpleDateFormatを使用して「2012-11-25T23:50:56.193 + 01:00」を取得するにはどうすればよいですか?私はJava SimpleDateFormatコロンで区切られた分のタイムゾーンオフセット
":MM:YYYY-MM-dd'T'hh ss.SSSZ" のような形式でZを使用する場合 - それは
2013-03-06T11を示しています。49:05.490 + 0100
Javaでは、SimpleDateFormatを使用して「2012-11-25T23:50:56.193 + 01:00」を取得するにはどうすればよいですか?私はJava SimpleDateFormatコロンで区切られた分のタイムゾーンオフセット
":MM:YYYY-MM-dd'T'hh ss.SSSZ" のような形式でZを使用する場合 - それは
2013-03-06T11を示しています。49:05.490 + 0100
あなたはタイムゾーンには、Java 7(yyyy-MM-dd'T'HH:mm:ss.SSSXXX
)中、またはジョダさんDateTimeFormat(yyyy-MM-dd'T'HH:mm:ss.SSSZZ
)とてSimpleDateFormatで+01:00
のようにフォーマットされたオフセットを得ることができます。
ここに2017年の回答があります。あなたができる方法があれば、SimpleDateFormat
のような時代遅れのクラスを投げ捨てて、java.time
で現代的で便利なクラスを使用してください。具体的には、希望の形式、2012-11-25T23:50:56.193+01:00
はISO-8601に準拠していますので、新しいクラスと箱から出てくるだけOffsetDateTime.toString()
を使用します。
OffsetDateTime time = OffsetDateTime.now();
System.out.println(time.toString());
これは
2017-05-10T16:14:20.407+02:00
一つのこと、あなたのようなものを出力しますしかし、意識したくないかもしれませんが、OffsetDateTime
オブジェクトの精度を印刷するのに要する秒単位の3つの小数点グループを印刷します。どうやら私のコンピュータには「今」という精度がミリ秒単位で表示されています(3小数点以下の秒数)。
たとえば、旧式のDate
オブジェクトをお持ちの場合は、いくつかの従来のメソッドの呼び出しから取得します。まず、現代のクラスの1つであるInstant
に変換することをお勧めします。そこから、要件に応じて簡単に他のコンバージョンを達成できます。
Date now = new Date();
OffsetDateTime time = now.toInstant().atZone(ZoneId.systemDefault()).toOffsetDateTime();
System.out.println(time.toString());
私は実際に必要以上に多くのコンバージョンを行っています。 atZone(ZoneId.systemDefault())
はZonedDateTime
を、そしてそのtoString()
はあなたが望むと言ったフォーマットを与えるとは限りません。それは簡単にそれにフォーマットすることができます:
ZonedDateTime time = now.toInstant().atZone(ZoneId.systemDefault());
System.out.println(time.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
jodaのない古いjavasのための方法はありますか? – Karussell
参照:http://stackoverflow.com/questions/13040143/generic-support-for-iso-8601-format-in-java-6 –
私はフォーマットが "HH"すなわちyyyy-MM-dd'Tであると信じています'HH:mm:ss.SSXXX; 'hh'は00-12と 'HH' 00-23を生成するためです。また、リンクされた他のSOの質問から。 – Leo