1. 概要
このクイックチュートリアルでは、Java 8、Java 7、およびJoda-Timeライブラリを使用して年齢を計算する方法を説明します。
いずれの場合も、生年月日と現在の日付を入力として受け取り、計算された年齢を年数で返します。
2. Java8の使用
Java 8は、主にJoda-Timeライブラリに基づいて、日付と時刻を操作するための新しいDate-TimeAPIを導入しました。
Java 8では、生年月日と現在の日付に java.time.LocalDate を使用してから、Periodを使用して年の差を計算できます。
public int calculateAge(
LocalDate birthDate,
LocalDate currentDate) {
// validate inputs ...
return Period.between(birthDate, currentDate).getYears();
}
LocalDateは、日付と時刻の両方を表すJavaの Date クラスと比較して、日付だけを表すため、ここで役立ちます。 LocalDate.now()は、現在の日付を提供できます。
また、 Period は、年、月、日の期間について考える必要がある場合に役立ちます。
より正確な年齢、たとえば秒単位で取得したい場合は、 それぞれLocalDateTimeおよびDuration(代わりに long を返す場合があります)。
3. Joda-Timeの使用
Java 8がオプションでない場合でも、Java8より前の世界での日時操作のデファクトスタンダードであるJoda-Timeから同じ種類の結果を得ることができます。 。
Joda-Time依存関係をpomに追加する必要があります。
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10</version>
</dependency>
次に、同様のメソッドを記述して年齢を計算できます。今回は、Joda-TimeのLocalDateとYearsを使用します。
public int calculateAgeWithJodaTime(
org.joda.time.LocalDate birthDate,
org.joda.time.LocalDate currentDate) {
// validate inputs ...
Years age = Years.yearsBetween(birthDate, currentDate);
return age.getYears();
}
4. Java7の使用
Java 7に専用のAPIがなければ、独自のAPIを使用する必要があるため、かなりの数のアプローチがあります。
一例として、java.util.Dateを使用できます。
public int calculateAgeWithJava7(
Date birthDate,
Date currentDate) {
// validate inputs ...
DateFormat formatter = new SimpleDateFormat("yyyyMMdd");
int d1 = Integer.parseInt(formatter.format(birthDate));
int d2 = Integer.parseInt(formatter.format(currentDate));
int age = (d2 - d1) / 10000;
return age;
}
ここでは、指定されたbirthDateオブジェクトとcurrentDateオブジェクトを整数に変換し、それらの違いを見つけます。8000でJava 7を使用していない限り、年、このアプローチはそれまで機能するはずです。
5. 結論
この記事では、Java 8、Java 7、およびJoda-Timeライブラリを使用して年齢を簡単に計算する方法を示しました。
Java 8のデータ時間サポートの詳細については、当社のJava8日時イントロをご覧ください。
そしていつものように、これらのスニペットの完全なコードはGitHubのにあります。