22

2012-11-25T23:50:56.193+01:00日付を使用するようにフォーマットするにはどうすればよいSimpleDateFormatですか?
私が次Zのような形式で使用する場合

yyyy-MM-dd'T'hh:mm:ss.SSSZ

その後、それは表示されます

2013-03-06T11:49:05.490+0100

4

2 に答える 2

52

Java 7+01:00SimpleDateFormat()またはJodaDateTimeFormat( )のようにフォーマットされたタイムゾーンオフセットを取得できます。yyyy-MM-dd'T'HH:mm:ss.SSSXXXyyyy-MM-dd'T'HH:mm:ss.SSSZZ

于 2013-04-29T22:33:41.150 に答える
4

これが2017年の回答です。できる方法がある場合は(あります)、SimpleDateFormat船外にあるような古いクラスを投げて、で最新のより便利なクラスを使用してjava.timeください。特に、目的の形式は2012-11-25T23:50:56.193+01:00ISO-8601に準拠しているため、新しいクラスですぐに使用できます。次を使用するだけOffsetDateTime.toString()です。

    OffsetDateTime time = OffsetDateTime.now();
    System.out.println(time.toString());

これは次のようなものを印刷します

2017-05-10T16:14:20.407+02:00

ただし、注意したい場合とそうでない場合がありますが、オブジェクトの精度を印刷するのに必要な数の小数点以下3桁のグループを秒に印刷しOffsetDateTimeます。どうやら私のコンピュータでは、「今」の精度はミリ秒(小数点以下3桁の秒)です。

たとえば、昔ながらのオブジェクトがある場合、レガシーメソッドの呼び出しから取得した場合、最初に行うことは、最新のクラスの1つであるにDate変換することをお勧めします。Instantそこから、要件に応じて他の変換を簡単に行うことができます。

    Date now = new Date();
    OffsetDateTime time = now.toInstant().atZone(ZoneId.systemDefault()).toOffsetDateTime();
    System.out.println(time.toString());

私は本当に必要以上の変換を行っています。atZone(ZoneId.systemDefault())を生成しましたがZonedDateTimetoString()必ずしも希望どおりの形式になるとは限りません。ただし、簡単にフォーマットできます。

    ZonedDateTime time = now.toInstant().atZone(ZoneId.systemDefault());
    System.out.println(time.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
于 2017-05-10T14:21:30.257 に答える