次のような状況があります:
特定の日付に開始し、翌日に終了するアクティビティを計画するために、24u 時間の制約を超える終了日/時刻の値が指定されています。
例: 開始日 = 2013-01-01 23:22:00 および終了日 = 2013-01-01 26:22:00
解決策は、JodaTime が提供する寛大な方法を使用することだと思いました。しかし、それは私が期待したように動作しませんでした。だから私はいくつかのテストコードを提供して、私の混乱を説明しました:
public static void main(String[] args){
String lenientDate = "2013-01-01 26:22:00";
String format = "YYYY-MM-DD hh:mm:ss";
try{
System.out.println("Lenient Date:" + lenientDate);
DateFormat sdf = new SimpleDateFormat(format);
sdf.setLenient(true);
System.out.println("Java.Date output:" + sdf.parse(lenientDate));
DateTime dt = new DateTime(sdf.parse(lenientDate));
System.out.println("hybrid calls:" + dt.toString());
DateTimeFormatter parseFormat = DateTimeFormat.forPattern(format);
Chronology lenient = LenientChronology.getInstance(GregorianChronology.getInstance());
parseFormat = parseFormat.withChronology(lenient);
DateTime dateTime = parseFormat.parseDateTime(lenientDate);
System.out.println("All Joda calls:" + dateTime.toString());
System.out.println("My expected values: " + dateTime.minusHours(12).toString());
}catch(Exception e){
System.out.println("Something went wrong!");
}
}
結果は次のとおりです。
Lenient Date:2013-01-01 26:22:00
Java.Date output:Mon Dec 31 02:22:00 CET 2012
hybrid calls:2012-12-31T02:22:00.000+01:00
All Joda calls:2013-01-02T14:22:00.000+01:00
My expected values: 2013-01-02T02:22:00.000+01:00
ライブラリ: Joda 2.2; Java: JDK 1.7; プラットフォーム: Mac OS X
誰かが日付/時刻変換における寛大さの正しい動作を説明できますか?