UPDATEJoda-Timeプロジェクトは、今maintenance modeで、java.timeクラスへの移行をアドバイスします。 ChronoUnit
およびその他のjava.timeクラスの使用については、Anees Aによってthe Answerを参照してください。
ジョダタイム
古いjava.util.Date/.Calendarクラスは、悪名高い厄介であり、避けるべきです。
代わりにJoda-Timeライブラリを使用してください。 Java 8テクノロジを使用している場合を除き、その後継の組み込みのjava.timeフレームワーク(2015年時点ではAndroidでは使用できません)。
「日」は日付として定義されているため(24時間ではなく)、日付に焦点を当てます。 Joda-Timeは、LocalDate
クラスに時間帯や時間帯のない日付のみの値を表すクラスを提供します。
時間帯が不足している場合、タイムゾーンはであり、重要なのはで、今日のような日付を決定することに注意してください。西日本よりも東日本に新しい日が始まります。だから、ある日に世界中の日付が同じではなく、日付はあなたのタイムゾーンによって異なります。
DateTimeZone zone = DateTimeZone.forID ("America/Montreal");
LocalDate today = LocalDate.now (zone);
次の週までの日数を数えましょう。これはもちろん7日間とします。端に
LocalDate weekLater = today.plusWeeks (1);
int elapsed = Days.daysBetween (today , weekLater).getDays();
getDays
はdaysBetween
によって返さDays
物体からプレーンint
番号を抽出します。
コンソールにダンプします。
System.out.println ("today: " + today + " to weekLater: " + weekLater + " is days: " + days);
今日:weekLaterへ2015年12月22日:2015年12月29日の日です:7
あなたはカレンダーオブジェクトを持っています。 Joda-Timeオブジェクトに変換する必要があります。内部的には、カレンダーオブジェクトはlong
の整数で、1970年の初めの時代からのミリ秒数を追跡します。UTCです。その番号を抽出してJoda-Timeに送ることができます。また、日付を決定する予定の時間帯を割り当てる必要があります。
long startMillis = myStartCalendar.getTimeInMillis();
DateTime startDateTime = new DateTime(startMillis , zone);
long stopMillis = myStopCalendar.getTimeInMillis();
DateTime stopDateTime = new DateTime(stopMillis , zone);
DateTimeオブジェクトをLocalDateに変換します。
LocalDate start = startDateTime.toLocalDate();
LocalDate stop = stopDateTime.toLocalDate();
これまでに見たのと同じ経過計算を行ってください。
int elapsed = Days.daysBetween (start , stop).getDays();
質問彼らはジョダ時間を書いた理由です。 Javaのカレンダーはとても絶望的です...あなたはそれを使用しなければなりませんか? – iluxa
あなたがしなければならない場合、私は両方ともmillisに変換し、これらと一緒に、率直に言って:-) – iluxa