Joda-Time における 2 つの日付間の日数 質問する

Joda-Time における 2 つの日付間の日数 質問する

2つの期間の日数の差を調べるにはどうすればいいですか?ジョダタイム DateTimeインスタンスですか?「日数の差」とは、開始が月曜日で終了が火曜日の場合、開始日と終了日の時/分/秒に関係なく、戻り値 1 が期待されることを意味します。

Days.daysBetween(start, end).getDays()開始が夕方で終了が朝の場合は 0 になります。

他の日付フィールドでも同じ問題が発生しているため、重要性の低いフィールドを「無視」する一般的な方法があることを期待していました。

つまり、2 月から 3 月 4 日までの月も 1 になり、14:45 から 15:12 までの時間も 1 になります。ただし、14:01 から 14:55 までの時間差は 0 になります。

ベストアンサー1

残念なことに、withTimeAtStartOfDay の答えは間違っていますが、たまにしか起こりません。必要なのは、次のとおりです。

Days.daysBetween(start.toLocalDate(), end.toLocalDate()).getDays()

「真夜中/一日の始まり」は午前 1 時を意味する場合があり (一部の地域では夏時間がこのように行われます)、Days.daysBetween では適切に処理されないことが判明しました。

// 5am on the 20th to 1pm on the 21st, October 2013, Brazil
DateTimeZone BRAZIL = DateTimeZone.forID("America/Sao_Paulo");
DateTime start = new DateTime(2013, 10, 20, 5, 0, 0, BRAZIL);
DateTime end = new DateTime(2013, 10, 21, 13, 0, 0, BRAZIL);
System.out.println(daysBetween(start.withTimeAtStartOfDay(),
                               end.withTimeAtStartOfDay()).getDays());
// prints 0
System.out.println(daysBetween(start.toLocalDate(),
                               end.toLocalDate()).getDays());
// prints 1

を経由すると、LocalDate問題全体が回避されます。

おすすめ記事