次の日付/時刻のフォーマットに問題があります:
2013-01-10T17:04:24.3787635-02:00
今、私2013-01-10
は日付であることを理解しています(明らかに)。
17:04:24.3787635
おそらく時間ですが、ドットの後の数字が何を意味するのかわかりません。
-02:00
タイムゾーン(GMT)だと思います。
これをJavaで解析するにはどうすればよいですか? (おそらくJodaTimeを使用しています)。
JodaTimeを使用して、この日付を解析できます。
String time = "2013-01-10T17:04:24.3787635-02:00";
DateTimeFormatter df = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ");
DateTime dateTime = df.parseDateTime(time);
ドット()の後の数字は、DateTimeFormat.
で示される秒の端数です。タイムゾーンパターンを表します。S
JodaTime's
Z
このパターンを使用してみてください:
"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"
この形式で日付を解析できるのは次のとおりです。
2001-07-04T12:08:56.235-07:00
ただし、3787635
ソース文字列では面倒です。ミリ秒のようには見えません。
java.text.SimpleDateFormat
パターンの詳細については、 を参照してください。
DatatypeConverter.parseDateTime
どちらがオブジェクトを返すかを試すこともできjava.util.Calendar
ます。
DatatypeConverter.parseDateTime("2013-01-10T17:04:24.3787635-02:00").getTime()
上記のステートメントは、エラーなしで実行されます。
この形式は、javax.xml.XMLGregorianCalendarでのみ正しく解析できます。SimpleDateFormatは、SSSを秒の小数部分としてではなく、ミリ秒数として受け入れるため、使用できません。
String s = "2013-01-10T17:04:24.3787635-02:00";
DatatypeFactory dtf = DatatypeFactory.newInstance();
Date date = dtf.newXMLGregorianCalendar(s).toGregorianCalendar().getTime();
時間文字列の形式は ISO8601 形式です。JodaTime クラスISODateTimeFormat
はその形式を直接サポートします。ただし、ミリ秒を超える精度は失われます。
String time = "2013-01-10T17:04:24.3787635-02:00";
DateTime dateTime = ISODateTimeFormat.dateTime().parseDateTime(time);