2013-03-06 7 views

答えて

22

あなたはタイムゾーンには、Java 7(yyyy-MM-dd'T'HH:mm:ss.SSSXXX中、またはジョダさんDateTimeFormatyyyy-MM-dd'T'HH:mm:ss.SSSZZ)とてSimpleDateFormat+01:00のようにフォーマットされたオフセットを得ることができます。

+2

jodaのない古いjavasのための方法はありますか? – Karussell

+1

参照:http://stackoverflow.com/questions/13040143/generic-support-for-iso-8601-format-in-java-6 –

+1

私はフォーマットが "HH"すなわちyyyy-MM-dd'Tであると信じています'HH:mm:ss.SSXXX; 'hh'は00-12と 'HH' 00-23を生成するためです。また、リンクされた他のSOの質問から。 – Leo

1

ここに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)); 
関連する問題