私はこのような日付文字列を持っています " 2010-12-10T20:03:53-06:00 " Javaで同じものを同等の日付オブジェクトに変換したい。これを行う方法はありますか?
6 に答える
あなたが探しているのは SimpleDateFormat.parse() です。文字列を Date オブジェクトに変換します。
http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html
X
Java 7を使用している場合は、UTCオフセットの新しい指定子を使用して、文字列をマッサージしなくても大丈夫です。
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX", Locale.US);
Date date = format.parse(text);
(テストして確認します-JDK7を自分でインストールしたとき:)
ただし、一般的に、日付の処理にはJodaTimeを使用することを強くお勧めします。その指定子は、コロンでオフセットを処理できます。Z
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ")
.withLocale(Locale.US);
DateTime dateTime = formatter.parseDateTime(text);
実際、ISODateTimeFormat
これをさらに簡単にするクラスがあります。
DateTimeFormatter formatter = ISODateTimeFormat.dateTimeNoMillis();
Joda Timeは、組み込みのAPIよりもはるかに優れた日付/時刻APIです。(完璧にはほど遠いですが、それよりもはるかに優れていDate
ますCalendar
...)
これには DateFormat クラスを使用する必要があります。
:
まず、タイムゾーン部分でそれを取り除き、日付文字列を次のようにする必要があります
2010-12-10T20:03:53-0600
以下のコード スニペットを使用します。
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
Date d = formatter.parse("2010-12-10T20:03:53-0600");
注:Java 6でこれを確認しました.Skeet氏は、Java 7について詳しく知らないため、Java 7を扱うより良い答えを述べました
Java 7までは、標準のJDK Dateを使用してタイムゾーンにコロンを含む日付を解析することはできません。Java7より前のタイムゾーンは、名前または形式の完全なタイムゾーンである必要があります-0600
。
3つのオプションがあります。
- Java 7以降を使用する場合は、次のパターンを使用してください:
"yyyy-MM-dd'T'HH:mm:ssX"
SimpleDateFormatを使用 - 手動でコロンを削除して解析します
- Joda Timeを使用します。例:https ://stackoverflow.com/a/2375539/829571
2番目のオプションの例を次に示します。
public static void main(String[] args) throws ParseException {
String input = "2010-12-10T20:03:53-06:00";
int colon = input.lastIndexOf(":");
input = input.substring(0, colon) + input.substring(colon + 1, input.length());
System.out.println(input);
DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
Date date = fmt.parse(input);
System.out.println("date = " + date);
}
Joda timeを使用します。強力で使いやすいです。