LoginSignup
0
0

【Java入門】Calendarクラスで日付を操作する方法(getメソッド,setメソッド,addメソッド,rollメソッド)

Last updated at Posted at 2023-10-01

Calendarクラス

・Calendarクラスとは

 現在の年月日を取得したり、指定した日時の設定や加算・減算、日時を比較するなど、日時を扱うさまざまな処理が可能なクラスです。
 使用するには以下のパッケージを取得する必要があります。

パッケージのインポート
import java.util.Calendar

 
 また生成の方法は、抽象クラスのためnew演算子でオブジェクト生成はできず、getInstance()メソッドを使用して生成します。

Calendarクラスの生成
Calendar cl = Calendar.getInstance();

 getInstanceメソッドは、オブジェクトを生成する度に、現在の年・月・日に初期化された状態でオブジェクトを返します。getInstance()は、クラスメソッドでコンピューターの設定に合わせて適切なカレンダーを取得します。(大体はグレゴリオ暦なのでGregorianCalendarのインスタンスが入ります。)

・get()メソッドで日付を取得する

 ここではget()メソッドを使って日付を取得する方法を説明します。
以下のサンプルコードのようにgetTime()メソッドとget()メソッドを使うことで日付の要素を取得することができます。

日付を取得する二つの方法
import java.util.Calendar;

public class Main {
	public static void main(String[] args) {
		
		// Calendarクラスの生成
		Calendar cl = Calendar.getInstance();
		
		// 現在日時の出力
		System.out.println("現在日時:" + cl.getTime());
        // getメソッドで年・月・日・時間を出力
		System.out.println("年:" + cl.get(Calendar.YEAR));
		System.out.println("月:" + (cl.get(Calendar.MONTH) + 1));
		System.out.println("日:" + cl.get(Calendar.DATE));
		System.out.println("時間:" + cl.get(Calendar.HOUR));

	}
}
実行結果
日付:Sat Sep 30 22:21:56 JST 2023
年:2023
月:9
日:30
時間:10

 getTime()メソッドでは、Dateオブジェクトを返すため、Calendarクラス生成時に初期化された日時が取得できます。get()メソッドでは、指定されたCalendarのフィールドの値を返します。サンプルコードでは、年・月・日・時間をそれぞれ取得しています。フィールドは他にいくつかあります。

※月に関しては、「0」から始まるので0が1月になります。そのため出力する時は、誤認をなくすために+1をしています。

・フィールド一覧

フィールド 説明
YEAR
MONTH
DATE
HOUR 時間(12時間)
MINUTE
SECOND
HOUR_OF_DAY 時間(24時間)
AM_PM 午前なら「0」、午後なら「1」を返す

・set()メソッド日付を設定する

 ここではset()メソッドを使って日付を設定する方法を説明します。
set()メソッドは、第一引数にフィールド、第二引数に設定する値を指定することで、要素を設定することができます。

public void set(int field, int value)

 以下のサンプルコードのようにset()メソッドを使うことで「年」を変更できます。第一引数は、Calendarクラスのフィールドを指定することで設定する要素を選ぶことができます。

set()メソッドで年の設定
import java.util.Calendar;

public class Main {
	public static void main(String[] args) {
		
		// Calendarクラスの生成と現在日時の出力
		Calendar cl = Calendar.getInstance();
		System.out.println("現在日時:" + cl.getTime());
		
		
		// set()メソッドで年を設定
		cl.set(Calendar.YEAR, 2019);
		
		System.out.println("変更後日時:" + cl.getTime());
		
	}
}
実行結果
現在日時:Sun Oct 01 10:07:02 JST 2023
変更後日時:Tue Oct 01 10:07:02 JST 2019

・まとめて日付を設定する【応用】

 上記のようにフィールドを指定して設定する他に、まとめて設定する方法があります。set()メソッドにはオーバーロードされたメソッドが3つあります。

public void set(int year, int month, int date)
public void set(int year, int month, int date, int hourOfDay, int minute)
public void set(int year, int month, int date, int hourOfDay, int minute, int second)

 
 以下のサンプルコードでは、3つのset()メソッドを使って日付を設定してみます。

set()メソッドで年の設定
import java.util.Calendar;

public class Main {
	public static void main(String[] args) {
		
		// Calendarクラスの生成と現在日時の出力
		Calendar cl = Calendar.getInstance();
		System.out.println("現在日時    :" + cl.getTime());
		
		
		// set()メソッドでまとめて要素を設定
		cl.set(2019,1,1);
		System.out.println("年月日変更   :" + cl.getTime());
		
		cl.set(2019,1,1,1,1);
		System.out.println("年月日時分変更 :" + cl.getTime());
		
		cl.set(2019,1,1,1,1,1);
		System.out.println("年月日時分秒変更:" + cl.getTime());
		
	}
}
実行結果
現在日時    :Sun Oct 01 10:25:37 JST 2023
年月日変更   :Fri Feb 01 10:25:37 JST 2019
年月日時分変更 :Fri Feb 01 01:01:37 JST 2019
年月日時分秒変更:Fri Feb 01 01:01:01 JST 2019

・add()メソッドで日付を加算/減算する

 ここではadd()メソッドを使って日付を設定する方法を説明します。
add()メソッドは、第一引数にフィールド、第二引数に加算または減算を入れて、要素を変更することができます。

public abstract void add(int field, int amount)

 以下のサンプルコードのようにset()メソッドを使うことで「年」を変更できます。第一引数は、Calendarクラスのフィールドを指定することで設定する要素を選ぶことができます。

set()メソッドで年の設定
import java.util.Calendar;

public class Main {
	public static void main(String[] args) {
		
		// Calendarクラスの生成と現在日の出力
		Calendar cl = Calendar.getInstance();
		System.out.println("現在日時   :" + cl.getTime());
		
		
		// add()メソッドで要素を変更
		cl.add(Calendar.YEAR, 1);
		System.out.println("1年追加   :" + cl.getTime());
		
		cl.add(Calendar.MONTH, -1);
		System.out.println("1月減算   :" + cl.getTime());
		
		
		
	}
}
実行結果
現在日時   :Sun Oct 01 10:38:22 JST 2023
1年追加   :Tue Oct 01 10:38:22 JST 2024
1月減算   :Sun Sep 01 10:38:22 JST 2024
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0