SimpleDateFormat
を使用して日付を2012-11-25T23:50:56.193+01:00
の形式で取得するにはどうすればよいですか?Z
を次のような形式で使用した場合
yyyy-MM-dd'T'hh:mm:ss.SSSZ
その後、それは示しています
2013-03-06T11:49:05.490+0100
Java 7(+01:00
)のSimpleDateFormatまたはJoda 'を使用して、yyyy-MM-dd'T'HH:mm:ss.SSSXXX
のような形式のタイムゾーンオフセットを取得できます。 sDateTimeFormat(yyyy-MM-dd'T'HH:mm:ss.SSSZZ
)。
こちらが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
_
ただし、知っておくとよいことは1つありますが、OffsetDateTime
オブジェクトの精度を出力するのに必要な秒数で、小数点以下3桁のグループを出力します。どうやら私のコンピューターでは、「今」はミリ秒(小数点以下3桁の秒)の精度で表示されます。
古いDate
オブジェクトがある場合、たとえば、レガシーメソッドの呼び出しから取得した場合、最初に行うことは、それを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));
_