23

ネイティブJavaクラスに、特定の年の日数を計算するメソッドはありますか?のように、うるう年(366日)または平年(365日)でしたか?

それとも自分で書く必要がありますか?

たとえば、誕生日までの残り日数など、2つの日付の間の日数を計算しています。うるう年の2月29日を考慮に入れたいと思います。29日を除いてすべて完了しました。

4

9 に答える 9

50

Calendarそれを行う別の方法は、特定の年の実際の最大日数をクラスに尋ねることです。

Calendar cal = Calendar.getInstance();
cal.setTime(new Date());

int numOfDays = cal.getActualMaximum(Calendar.DAY_OF_YEAR);
System.out.println(numOfDays);

これにより、うるう年の場合は366、通常の年の場合は365が返されます。

getActualMaximumの代わりに使用したことに注意してくださいgetMaximum。これは常に366を返します。

于 2012-09-17T13:27:48.110 に答える
23
于 2015-09-01T02:08:53.280 に答える
15

GregorianCalendar標準クラスにはメソッドisLeapyear()があります。年番号(たとえば)だけがある場合は、この2008コンストラクターを使用して日付を作成し、後でメソッドを確認します。isLeapYear()

于 2011-01-24T21:47:18.057 に答える
7

JAVA8以降

1年の日数:

LocalDate d = LocalDate.parse("2020-12-31");                   // import java.time.LocalDate;
return d.lengthOfYear();                                       // 366

私の誕生日までの日数:

LocalDate birth = LocalDate.parse("2000-02-29");
LocalDate today = LocalDate.now();                             // or pass a timezone as the parameter

LocalDate thisYearBirthday = birth.withYear(today.getYear());  // it gives Feb 28 if the birth was on Feb 29, but the year is not leap.
LocalDate nextBirthday = today.isAfter(thisYearBirthday)
    ? birth.withYear(today.getYear() + 1)
    : thisYearBirthday;

return DAYS.between(today, nextBirthday);                      // import static java.time.temporal.ChronoUnit.DAYS;
于 2020-01-13T00:21:46.607 に答える
6

DateTimeの計算には、JodaTimeライブラリを使用することを強くお勧めします。特に必要なものについては、ワンライナーになります。

Days.daysBetween(date1, date2).getDays();

これがお役に立てば幸いです。

于 2011-01-24T22:08:49.000 に答える
5

GregorianCalendar.isLeapYear(int year)

于 2011-01-24T21:48:01.290 に答える
3

ウィキペディアのページで、非常に優れた擬似コードを確認できます。

if year modulo 400 is 0
       then is_leap_year
else if year modulo 100 is 0
       then not_leap_year
else if year modulo 4 is 0
       then is_leap_year
else
       not_leap_year

そのロジックをJavaで実装する方法を理解できると確信しています。:-)

于 2011-01-24T21:46:46.653 に答える
3

正確なユースケースは、Jodaとこの特定ので最もよく解決される可能性があります。

于 2011-01-24T21:54:23.383 に答える
1

TimeUnitクラスを使用できます。あなたの特定のニーズのためにこれはするべきです:

public static int daysBetween(Date a, Date b) {
    final long dMs = a.getTime() - b.getTime();
    return TimeUnit.DAYS.convert(dMs, TimeUnit.MILLISECONDS);
}

正直なところ、この計算でうるう年がどこで役割を果たすのかはわかりません。多分私はあなたの質問のいくつかの側面を逃しましたか?

編集:愚かな私、うるう年の魔法はで起こりDate.getTime()ます。とにかく、あなたはそれをこのように扱う必要はありません。

于 2011-01-24T21:56:01.083 に答える