web-dev-qa-db-ja.com

JodaTime DateTime.parse(string、formatter)を理解する

DateTimeクラスの parse メソッドのフォーマッタのスタイルは、文字列の正確なスタイルと一致する必要がありますか?たとえば、データベース(Oracle)からTimeStampオブジェクトを取得し、それを文字列に変換しています。データベースには、TimeStampは次のように保存されます

08-AUG-12 12.00.00.000000000 AM

フォーマッターをこのスタイルに設定します

String pattern = "dd-MMM-yy";

この例外が発生します

Java.lang.IllegalArgumentException: Invalid format: "08-AUG-12 12.00.00 AM" is malformed at " 12.00.00 AM"

org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.Java:866)

org.joda.time.DateTime.parse(DateTime.Java:144)

これは正確に何を意味し、どのように修正しますか?フォーマッタを"yy-MMM-dd hh.mm.ss aa"に設定すると、例外は発生しませんが、ブラウザでは2008-08-12T00:00:00.000-04:00のように印刷されますが、"dd-MMM-yy hh:mm:ss aa"として印刷する必要があります

18
Robert

代わりにLocalDateTimeを使用します。

String input = "08-AUG-12 12.00.00 AM";
String pattern = "dd-MMM-yy hh.mm.ss aa";

LocalDateTime localDateTime = LocalDateTime.parse(input, DateTimeFormat.forPattern(pattern));

[〜#〜] edit [〜#〜]

実際のところ、DateTimeでそれを行うこともできます。

private static String parseDateTime(String input){
     String pattern = "dd-MMM-yy hh.mm.ss aa";
     DateTime dateTime  = DateTime.parse(input, DateTimeFormat.forPattern(pattern));
     return dateTime.toString("dd-MMM-yy hh:mm:ss aa");
}
52
Eugene

理解した。正しい形式を取得するには、formatter.print(localDateTimeオブジェクト)を呼び出す必要があり、機能しました。

2
Robert