web-dev-qa-db-ja.com

この形式のJoda時間を解析する方法

JSONでフォーマットYYYY-mm-DD HH:MM:SSのDateStringを変換し、コードを使用してPOJOに永続化しました

DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
this.startDate = format.parseDateTime(startDate);

POJOをJSONに戻すと、日付は2013-07-12T18:31:01.000Zのように書き込まれます。
時間文字列2013-07-12T18:31:01.000Zを解析してJodaDateTimeオブジェクトに戻すにはどうすればよいですか。フォーマッターはどうあるべきか。
YYYY-mm-DD HH:MM:SSを使用しましたが、機能しませんでした

11
Nandish A

2013-07-12T18:31:01.000Z標準のISO日時形式です。
標準のJoda日時フォーマッターを使用できます ISODateTimeFormat :: dateTime()
例:

  String startDate = "2013-07-12T18:31:01.000Z";
  DateTime dt = ISODateTimeFormat.dateTime().parseDateTime(startDate);  

この場合、日付はタイムゾーンの日付に変換されます。
タイムゾーンを無視する場合は、フォーマッターでUTCゾーンを使用します。

  String startDate = "2013-07-12T18:31:01.000Z";
  DateTime dt = ISODateTimeFormat.dateTime().withZone(DateTimeZone.UTC).parseDateTime(startDate);
34
Ilya

パターンにXを追加する必要があります。 SimpleDateFormat AP​​I には、「ISO8601タイムゾーン」のDateFormatを含む、Xで使用できるフィールドの完全なリストが含まれています。

ISO8601タイムゾーンは次のように指定されます

パターン文字の数は、フォーマットと解析の両方のフォーマットを次のように指定します。

 ISO8601TimeZone:
         OneLetterISO8601TimeZone
         TwoLetterISO8601TimeZone
         ThreeLetterISO8601TimeZone
 OneLetterISO8601TimeZone:
         Sign TwoDigitHours
         Z
 TwoLetterISO8601TimeZone:
         Sign TwoDigitHours Minutes
         Z
 ThreeLetterISO8601TimeZone:
         Sign TwoDigitHours : Minutes
         Z
3
mthmulders

APIドキュメントは完全に明確ではありません:読む必要があります

OneLetterISO8601TimeZoneは「X」を意味し、Sign TwoDigitHoursまたはZを生成します。

したがって、-05のようなもの

TwoLetterISO8601TimeZoneは「XX」を意味し、Sign TwoDigitHours MinutesまたはZを生成します。

したがって、-0500のようなもの

threeLetterISO8601TimeZoneは「XXX」を意味し、Sign TwoDigitHours:Minutesを生成します。

したがって、-05:00のようなもの

1
user1708042