【Java】DateTimeクラスで日付を扱う方法を解説

Javaで日付を扱うにはどうすればいいの?
DateTimeクラスの使い方を詳しく知りたい

Javaには日付を簡単に扱うことができるDateTimeクラスがあります。

ここではDataTimeクラスについて、使い方の基本から日付フォーマットを指定する方法、Java8で追加されたDateTimeクラスの使い方などについて詳しく解説していきます。

なお、Javaの記事については、こちらにまとめています。

目次

JavaのDateTimeとは

DateTimeクラスは、日付を扱うときによく使用するCalendarクラスを、より扱いやすくしたライブラリです。

DateTimeクラスを使用するためには「joda-time-X.X」のパッケージをインストールする必要があります。
(2018時点の最新版は「joda-time-2.2」になります)

DateTimeクラスのパッケージ「joda-time-X.X」は、以下のサイトからダウンロードできます。
http://www.java2s.com/Code/Jar/j/Downloadjodatime22jar.htm

DateTimeクラスは、以下のパッケージの宣言が必要です。

import org.joda.time.DateTime;

DateTimeの使い方

初期化する方法

DateTime型を初期化するには、オブジェクト生成時にインスタンスにさまざまな引数を指定することが可能です。

以下にDateTimeクラスを初期化する基本的な方法を記述します。

import java.util.Date;
import org.joda.time.DateTime;

public class Main {
    public static void main(String[] args) throws Exception {
    	
    	//現在の日付で初期化する
    	DateTime dt1 = new DateTime();
    	
    	//年月日時分秒を指定して初期化する
    	DateTime dt2 = new DateTime(2017,4,30,13,00,30);
    	
    	//Date型を指定して初期化する
    	DateTime dt3 = new DateTime(new Date());
    	
    	System.out.println("dt1 : " + dt1.toString());
    	System.out.println("dt2 : " + dt2.toString());
    	System.out.println("dt2 : " + dt3.toString());
 
    }
}
実行結果
dt1 : 2017-04-06T20:08:04.095+09:00
dt2 : 2017-04-30T13:00:30.000+09:00
dt2 : 2017-04-06T20:08:04.147+09:00

DateTimeクラスは引数無しで設定すると現在の日時を取得することができますし、年月日時分秒を詳細に設定する方法、Dateクラスを指定する方法などがあります。

基本的な使い方

DateTimeクラスは、以下のようにメソッドを使用することで、年月日が簡単に取得することができます。

DateTime dt = new DateTime();
//年を取得する
dt.getYear();
//月を取得する
dt.getMonthOfYear();
//日を取得する
dt.getDayOfMonth();
//時間を取得する
dt.getHourOfDay();
//分を取得する
dt.getMinuteOfHour();
//秒を取得する
dt.getSecondOfMinute();
//曜日を取得する
dt.getDayOfWeek();

日付のフォーマットを指定する方法

DateTimeクラスは、日付のフォーマットもDateTimeFormatクラスのforPatternメソッドを使用すれば、簡単に設定することができます。

以下に日付のフォーマットを設定する方法を記述します。

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;

public class Main {
    public static void main(String[] args) throws Exception {
    	
    	DateTime dt = DateTimeFormat.
    	    forPattern("yyyy/MM/dd").parseDateTime("2017/04/01");
    	
    	System.out.println(dt.toString());
 
    }
}
実行結果
2017-04-01T00:00:00.000+09:00

サンプルではDateTimeクラスのオブジェクトに対して、DateTimeFormatクラスのforPatternメソッドを使用して、日付パターンを設定し、parseDateTimeメソッドで日時を指定しています。

Java8で追加されたDateTimeクラス

Java8で追加された日時APIには、便利な日付機能を兼ね備えたクラスがいくつか追加されました。
ここでは、LocalDateTimeクラスとZonedDateTimeクラスを紹介します。

java.time.LocalDateTime

LocalDateTimeクラスは、タイムゾーンのない日時を設定することができます。

LocalDateTimeクラスを使用するには、以下のパッケージをインポートします。

import java.time.LocalDateTime;

以下にLocalDateTimeクラスの基本的な使い方を記述します。

import java.time.LocalDateTime;

public class Main {
    public static void main(String[] args) throws Exception {
    	
    	LocalDateTime ldt = LocalDateTime.now();
    	System.out.println("ldt : " + ldt.toString());
 
    }
}
実行結果
ldt : 2017-04-06T20:22:20.867

java.time.ZonedDateTime

ZonedDateTimeクラスは、タイムゾーンのある日時を設定することができます。

ZonedDateTimeクラスを使用するには、以下のパッケージをインポートします。

import java.time.ZonedDateTime;

以下にZonedDateTimeクラスの基本的な使い方を記述します。

import java.time.ZonedDateTime;

public class Main {
    public static void main(String[] args) throws Exception {
    	
    	ZonedDateTime zdt = ZonedDateTime.now();
    	System.out.println("zdt : " + zdt.toString());
 
    }
}
実行結果
zdt : 2017-04-06T20:28:08.052+09:00[Asia/Tokyo]

まとめ

ここでは、DateTimeクラスについて、初期化方法や基本的な使い方、Java8で追加されたjava.timeパッケージのDateTimeクラスについても紹介しました。

Javaでは日付を扱うクラスが複数存在しますので、それぞれ用途や使い方をしっかりと覚えておきましょう。

もし、DateTimeクラスの使い方を忘れてしまったら、この記事を思い出してくださいね!

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次