1. ホーム

[解決済み】Joda-Timeの2つの日付の間の日数について

2022-04-15 03:44:39

質問

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

Days.daysBetween(start, end).getDays() は、開始が夕方で終了が午前の場合、0を返します。

他の日付フィールドでも同じ問題を抱えているので、重要度の低いフィールドを「無視」する一般的な方法があればいいなと思いました。

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

どのように解決するのですか?

困ったことに、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 は、この問題を回避します。