2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Java】Calendar ( 日時の計算をするクラス )

Last updated at Posted at 2020-11-29

Calendarクラス

【説明】

日付や 指定した日時の計算 」 などを行う場合に使用します。

【使用場面】

  • 入会してから90日後
  • 今日から1ヶ月と2週間後

といった、少々ややこしい計算が必要な時に便利です。

【基本構文】

java.util.Calendar の インポート

まずは import java.util.Calendar; で通常のようにインポートを行います。

// Calendarクラスのインポート
import java.util.Calendar;

getInstanceメソッド で オブジェクト の生成(重要)

Calendarクラスでは演算子newではなく、getInstanceメソッドを呼びオブジェクトを生成」します。

getInstanceメソッド

getInstanceメソッド は呼び出すごとに
現在の日付と時間に初期化された状態でオブジェクトを返す」メソッドです。

以上を踏まえて、Calendarクラスのインスタンス化( オブジェクト化 )のしかたはこちらです。

//Calendarクラスの オブジェクト の生成
Calendar calendar = Calendar.getInstance();

calendarクラスの「主要フィールド」のチートシート

フィールド 用途
YEAR
MONTH 月(0 ~ 11)
DATE,DAY_OF_MONTH 現在の 月 の 何日目 か
WEEK_OF_MONTH 現在の 月 の 何周目 か
DAY_OF_WEEK 現在の 週 の 何日目 か
AM_PM 午前 か 午後 か
HOUR 午前 / 午後 の 何時 か
HOUR_OF_DAY 24時間制 で 何時 か
MINUTE
SECOND

Calendarクラスに使うメソッド

Calendarクラスで特に使えそうなメソッドである、getTimeメソッド, setメソッド, addメソッド, formatメソッド のまとめです。

【使用場面】

  • getTimeメソッド (時刻を出力)
  • setメソッド (日時を設定する)
  • add (日付の加減算を行う)
  • format (文字列で日付のフォーマットを指定)

getTime()メソッド

【説明】

getTimeメソッドを利用することで、カレンダーから「 現在の時刻をjava.utilパッケージ の Dateオブジェクト 」 として取得できます。

【使用場面】

  • 現在時刻を表示したい時
  • setされた時刻を表示したい時

【基本構文】

基本的には カレンダーのオブジェクト名にドットでgetTime()繋げて呼び出します。

// getTime()
Calendarクラスのオブジェクト名.getTime()

【サンプルコード】 getTime()メソッドで現在時刻を出力

現在時刻を出力する場合以下のように記述します。

System.out.println(Calendarクラスのオブジェクト名.getTime());

getTime() メソッドを用いた一連の流れがこちらです。

package about_java_dateClass;

//Calendarクラスのインポート
import java.util.Calendar;

public class DateMain {

    public static void main(String[] args) {
			
        // Calendarクラスの オブジェクト の生成
        Calendar calendar = Calendar.getInstance();

        // 現在時刻を出力
        System.out.println(calendar.getTime());
    }
}

【実行結果】

Sun Nov 29 12:58:32 JST 2020

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

【説明】

setメソッドは日時を設定するために使用します。

【使用場面】

2020年を2030年に設定」といったような、日付を処理するようなプログラムによく使われます。

【基本構文】

calendar.set(年, 月, 日, 時, 分, 秒);

年月日時分をまとめて指定するとき

Calendar calendar = Calendar.getInstance();
calendar.set(2021, 1, 30, 22, 01, 55);
// 現在時刻を出力
System.out.println("現在時刻は" + date);
// setした時刻を出力
System.out.println("setした日時は" + calendar.getTime());

出力結果

現在時刻はSun Nov 29 12:38:43 JST 2020
setした日時はTue Mar 02 22:01:55 JST 2021

特定の日付/時刻要素(たとえば年だけ)を指定するとき

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, 2040);

// 現在時刻を出力
System.out.println("現在時刻は" + date);
// setした時刻を出力
System.out.println("setした日時は" + calendar.getTime());

出力結果

現在時刻はSun Nov 29 12:40:19 JST 2020
setした日時はThu Nov 29 12:40:19 JST 2040

addメソッド (日付の加減算を行う)

【説明】

Calendarクラスで
現在時刻を基準に日付の加減算を行うとき 」には addメソッドを使用する
。addメソッドでは、指定された日付/時刻要素(getメソッドの表を参照)に対して、

  • 引数の値だけ加算
  • 引数が負数の場合には減算

を行います。

【使用場面】

現在時刻から何年後、何年前、何日後、何日前といった日にちを計算して表示するなど。

【基本構文】

Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.演算する対象, 値);

【サンプルコード】 現在時刻から3ヶ月前の日付を表示するプログラム

現在 日本時間で 2020年 11月 29日ですが、そこから addメソッドを使って日付操作を行ってみます。

//Calendarクラスのインポート
import java.util.Calendar;

public class DateMain {

    public static void main(String[] args) {

        Calendar calendar = Calendar.getInstance();

        // addメソッドで 5年前にする
        calendar.add(Calendar.YEAR, -5);
        // addメソッドで 1ヶ月後にする
        calendar.add(Calendar.MONTH, 1);
        // addメソッドで 10日前にする
        calendar.add(Calendar.DATE, -10);
        // 年を表示
        System.out.println(calendar.get(Calendar.YEAR) + "年");
        // 月を表示
        System.out.println(calendar.get(Calendar.MONTH) + "月");
        // 日を表示
        System.out.println(calendar.get(Calendar.DATE) + "日");

    }

}

【実行結果】

以上のプログラムで現在時刻 日本時間で 2020年 11月 29日を操作し実行結果が以下になります。

2015年
11月
19日

formatメソッド

【説明】

文字列で日付のフォーマットを指定することができるメソッドです。

【使用場面】

"〇〇〇〇年〇〇月〇〇日"といったような、馴染みのあるフォーマットに変えたい時に使用する。

日時の書式について

こちらが日時のフォーマットの書式をまとめたものになります。
こちらのアルファベットを用いてフォーマットを作成していきます。

書式 概要 パターン 表示
G 紀元 G AD
y year, 年 yyyy
yyy
2020
20
M Month, 月 MM
MMM
MMMM
03
Mar
March
d day, 日 d
dd
1
01
H 時(0-23) H
HH
0
00
K 午前/午後の時(0-11) K
KK
0
00
h 午前/午後の時(1-12) h
hh
1
01
m m
mm
0
00
s s
ss
0
00
S ミリ秒 S
SSS
1
001

【基本構文】

まずはパッケージ指定後、Calendarクラスといっしょにjava.text.SimpleDateFormat;をインポートします。

// java.text.SimpleDateFormat をインポート。
import java.text.SimpleDateFormat;

import java.util.Calendar;

インポート後インスタンス化を行います。SimpleDateFormatの略で「sdf」とする場合が多いかもしれません。
そして、時刻表示する場合のフォーマットを作成します。
以下の例場合の実行結果も添えます。

// Calendarクラスの オブジェクト の生成
        Calendar calendar = Calendar.getInstance();
        //日付のフォーマットを設定
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年 MM月 dd日 E曜日 HH時(hh時) mm分 ss秒 SSSミリ秒");
// フォーマットを適用し現在時刻を表示
System.out.println(sdf.format(calendar.getTime())); 

実行結果

2020年 11月 29日 日曜日 15時(03時) 04分 36秒 845ミリ秒

あとがき

最近だとjava.utilでの日付操作はモダンではないようですが、今の所現場で現役だそうなので、習得しておきたい。

参考資料

2
0
0

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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?