3

選択した期間 (毎日、毎週、毎月、または毎年) に従って繰り返すイベントをカスタム カレンダーに設定する必要があります。開始日と終了日をミリ秒単位で指定しています。

質問:

2 ミリ秒の間の日数、週数、月数、および年数を計算できる Calender または Date API はありますか。Joda ライブラリを使用しましたが、適切な方法がありません。

このためのカスタム コードを作成する必要がありますか? :-(

4

8 に答える 8

2

あなたが小さな女の子と言うようなことを意味するなら:

6歳4ヶ月と3日

…ある期間の説明?

次に、Joda -Time 2.3のPeriodPeriodFormatter、および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();
于 2013-12-10T09:25:11.987 に答える
1

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; そして月、年。

于 2013-12-10T06:53:41.620 に答える
1

ミリ秒単位の日付がある場合、以下に提供されているJavaクラスは、必要なものをすべて取得するための答えです。

http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html

また、2 つの日付範囲がある場合、簡単にできることは、差をミリ単位で計算し、それらを分割して秒を計算し、次に時間、日、月などを計算して必要なものをすべて取得することだけです。

于 2013-12-10T06:11:11.347 に答える
0

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.
于 2018-08-29T00:30:21.923 に答える