選択した期間 (毎日、毎週、毎月、または毎年) に従って繰り返すイベントをカスタム カレンダーに設定する必要があります。開始日と終了日をミリ秒単位で指定しています。
質問:
2 ミリ秒の間の日数、週数、月数、および年数を計算できる Calender または Date API はありますか。Joda ライブラリを使用しましたが、適切な方法がありません。
このためのカスタム コードを作成する必要がありますか? :-(
選択した期間 (毎日、毎週、毎月、または毎年) に従って繰り返すイベントをカスタム カレンダーに設定する必要があります。開始日と終了日をミリ秒単位で指定しています。
質問:
2 ミリ秒の間の日数、週数、月数、および年数を計算できる Calender または Date API はありますか。Joda ライブラリを使用しましたが、適切な方法がありません。
このためのカスタム コードを作成する必要がありますか? :-(
あなたが小さな女の子と言うようなことを意味するなら:
6歳4ヶ月と3日
…ある期間の説明?
次に、Joda -Time 2.3のPeriod、PeriodFormatter、およびPeriodFormatterBuilderクラスが必要です。
Joda-Time: Period、Interval、Duration の違いは何ですか?という質問を参照してください。
Joda-Time doc のPeriod に関するこのディスカッションを参照してください。
Joda-Time のドキュメントから…</p>
たとえば、「15 年と 8 か月」のように年と月を出力するフォーマッタは、次のように作成できます。
PeriodFormatter yearsAndMonths = new PeriodFormatterBuilder()
.printZeroAlways()
.appendYears()
.appendSuffix(" year", " years")
.appendSeparator(" and ")
.printZeroRarelyLast()
.appendMonths()
.appendSuffix(" month", " months")
.toFormatter();
CalDroid が問題を解決するかもしれません。そのソース コードとサンプルはこちらにあります。
public static long getDayDiff(long startDay, long endDay) {
long diff = endDay - startDay;
long diffDays = diff / (24 * 60 * 60 * 1000);
return diffDays;
}
したがって、diffWeek = diffDays/7; そして月、年。
ミリ秒単位の日付がある場合、以下に提供されているJavaクラスは、必要なものをすべて取得するための答えです。
http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html
また、2 つの日付範囲がある場合、簡単にできることは、差をミリ単位で計算し、それらを分割して秒を計算し、次に時間、日、月などを計算して必要なものをすべて取得することだけです。
Date
これは、 、Calendar
およびTimeUnit
クラスを使用する方法です。
private String getAge(long start, long end){
long milliseconds = TimeUnit.MILLISECONDS.toMillis(Math.abs(end - start));
Calendar c = Calendar.getInstance();
c.setTimeInMillis(milliseconds);
int mYear = c.get(Calendar.YEAR)-1970;
int mMonth = c.get(Calendar.MONTH);
int mDay = c.get(Calendar.DAY_OF_MONTH)-1;
int mWeek = (c.get(Calendar.DAY_OF_MONTH)-1)/7;
return "The difference is " + mYear + " years, " + mMonth + " months, " + mDay + " days. " + mWeek + " Weeks.";
}
これは関数を呼び出す例です:
System.out.println(getAge2(1538110800000L , 479628000000L));
出力:
The difference is 33 years, 6 months, 16 days. 2 Weeks.