タイムスタンプをyyyy-MM-ddThh:mm:ss:SSSZ形式からMM/dd/yyyy hh:mm:ss.SSS形式に変換するにはどうすればいいですか? ISO8601からUTCへ 質問する

タイムスタンプをyyyy-MM-ddThh:mm:ss:SSSZ形式からMM/dd/yyyy hh:mm:ss.SSS形式に変換するにはどうすればいいですか? ISO8601からUTCへ 質問する

タイムスタンプ 2011-03-10T11:54:30.207Z を 10/03/2011 11:54:30.207 に変換したいのですが、どうすればよいですか? ISO8601 形式を UTC に変換し、その UTC が場所を認識するようにしたいです。助けてください

String str_date="2011-03-10T11:54:30.207Z";
DateFormat formatter ;
Date date ;
formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS");
date = (Date)formatter.parse(str_date);
System.out.println("output: " +date );

例外:java.text.ParseException: 解析できない日付: "2011-03-10T11:54:30.207Z"

ベストアンサー1

まず、UTC は形式ではなく、実質的にはタイムゾーンであることを認識する必要があります。したがって、「ISO8601 から UTC に変換する」という概念は実際には意味がありません。

しかし、Joda Timeを使ってテキストを解析してDateTimeフォーマットするサンプルプログラムがあります。1つの使用したいフォーマット - それ以上のことを言うには、何をしようとしているのかに関する情報が十分に提供されていません。タイムゾーンも考慮する必要があります...地元指定された瞬間の時刻ですか? その場合は、ユーザーのタイムゾーンを調べて適切に変換する必要があります。

import org.joda.time.*;
import org.joda.time.format.*;

public class Test {
    public static void main(String[] args) {
        String text = "2011-03-10T11:54:30.207Z";
        DateTimeFormatter parser = ISODateTimeFormat.dateTime();
        DateTime dt = parser.parseDateTime(text);

        DateTimeFormatter formatter = DateTimeFormat.mediumDateTime();
        System.out.println(formatter.print(dt));
    }
}

おすすめ記事