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-TimeLocalDateYearsを使用します。

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にあります。