👏

Java 日時を扱うクラス

2024/12/10に公開

Java

日時を扱うクラス

クラス クラスの用途
Dateクラス 現在日時が取得できる。
Calendarクラス 任意の日時を設定したり取得できる。
SimpleDateFormatクラス Dateクラスのフォーマットを指定する。

Dateクラス

  • Dateクラスを使うと、現在日時が取得できる。
  • 現在日時は、たとえば日時を指定してキャンペーン中のみ表示名を切り替える場合や、コンテンツの登録時に登録した日時をセットして更新順にコンテンツを並び替える場合などによく使われる。
  • さらに、フォーマッターというのを使ってローカライズする。
getTImeZone(Asia/Tokyo)
SimpleDateFormat()
package some.package;

import java.util.Date;

public class DateTime_Test1 {
   public static void main(String[] args) {
  	//現在日時を取得する
	Date date = new Date();

	//現在日時を出力する
	System.out.println(date);
   }
}

この例の実行結果は次のように現在日時が出力される。
現在日時の取得結果は曜日から始まり年で終わる。

Mon Feb 20 21:50:06 JST 2023

実行結果の詳しい意味は次の通り。

実行結果 意味
Mon 曜日を示す。(Monは月曜日)
Feb 月を示す。(Febは2月)
20 日を示す。
21:50:06 時間:分:秒を示す。
JST 日本時間を示す。
2023 年を示す。

calendarクラス

  • CalendarクラスのMONTHだけは「0」から始まる。
  • 任意の日時を設定、取得できる。Calendarクラスを使うためには、Calendarクラスのオブジェクトを生成して使用する。
  • Calendarクラスのオブジェクトは、以下の書式で生成する。
Calendar Calendarクラスのオブジェクト = Calendar.getInstance()
  • 任意の日時は、以下の書式で設定する。
Calendarクラスのオブジェクト.set(,,,,,)
  • 任意の日時は、以下の書式で取得する。
Calendarクラスのオブジェクト.get(Calendarクラス.Calendarクラスのフィールド)

[[calenderクラス使用例]]

DateTime_Test2.java
package text.section_21;

import java.util.Calendar;
import java.util.Date;

public class DateTime_Test2 {
  public static void main(String[] args) {
    //現在日時を取得。
	Date date = new Date();

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

	//Dateクラスで日時を設定。
	calendar.setTime(date);

	//任意の年月日を取得して、出力。
	System.out.println("年は"+calendar.get(Calendar.YEAR));

    //CalendarクラスのMONTHは0から始まるので、実行結果の1は2月を示す。
	System.out.println("月は"+calendar.get(Calendar.MONTH));
	System.out.println("日は"+calendar.get(Calendar.DATE));

	//任意の時分秒を取得して、出力。
	System.out.println("時間は"+calendar.get(Calendar.HOUR));
	System.out.println("分は"+calendar.get(Calendar.MINUTE));
	System.out.println("秒は"+calendar.get(Calendar.SECOND));
  }
}

[[この例の実行結果]]

年は2023
月は1
日は23
時間は10
分は29
秒は31

Calendarクラスのフィールドの意味は次の通り。

実行結果 意味
YEAR 年を示す。
MONTH 月を示す。(0から始まる)
DATE 日を示す。
HOUR 時間を示す。
MINUTE 分を示す。
SECOND 秒を示す。

[[解説]]
Dateクラスで現在日時を取得し、次に、Calendarクラスのオブジェクトを生成している。
そして、Dateクラスで取得した現在日付をCalendarクラスの日時に格納。
その後、Calendarクラスの各フィールドの値を取得して、日時を各フィールド毎に出力してる。
CalendarクラスのMONTHは0から始まるので、実行結果の1は2月を示している。

DateクラスとCalendarクラスの機能おさらい。

クラス クラスの機能
Date 現在日時を取得できる。
Calendar 任意の日時を設定し取得できる。

SimpleDateFormatクラス

  • Dateクラスのフォーマットを指定することができる。
  • フォーマットはデフォルトのフォーマットを指定することも、特定のフォーマットを指定することもできる。デフォルトのフォーマットとは、初期値として持っているフォーマットのこと。
  • SimpleDateFormatクラスの初期値のフォーマットは、「yyyy/MM/dd H」というフォーマット。

日時を表示する時に、年のみを表示させたい場合や、月のみを表示させたい場合などその用途は様々。フォーマットを指定できれば、用途に合わせて日時を表示できる。

デフォルトのフォーマットを指定する場合は次の順序で行う。

  1. Dateクラスを使い日時を取得する。
  2. SimpleDateFormatクラスのコンストラクタを引数無しで実行し、SimpleDateFormatクラスのオブジェクトを生成する。
  3. "1."で取得した日時を、"2."で生成したSimpleDateFormatクラスのオブジェクトでフォーマットする。
  • 日時を取得するためには、Dateクラスのオブジェクトを生成する。
  • 次に、SimpleDateFormatクラスのコンストラクタを引数無しで実行すると、SimpleDateFormatクラスのオブジェクトが生成される。以下の書式で実行する。
SimpleDateFormat SimpleDateFormatクラスのオブジェクト = new SimpleDateFormat();

取得した日時は、生成したSimpleDateFormatクラスのオブジェクトでフォーマットする。
以下の書式で実行できる。

生成したSimpleDateFormatクラスのオブジェクト.format(取得した日時)

[[デフォルトのフォーマットを指定例]]

package some.package;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateTime_Test3 {
   public static void main(String[] args) {
  	//現在日時を取得する
	Date date = new Date();
   	 
	//SimpleDateFormatクラスのコンストラクタを引数無しで実行する。
	//その結果、SimpleDateFormatクラスのオブジェクトを生成する。
	SimpleDateFormat format = new SimpleDateFormat();
   	 
	//取得した日時を、生成したSimpleDateFormatクラスのオブジェクトでフォーマットする
	System.out.println(format.format(date));
   }
}
2023/02/25 7:28

SimpleDateFormatクラスのデフォルトのフォーマットは、「yyyy/MM/dd H」というフォーマットである。このフォーマットは次の意味を持つ。

フォーマット 意味
y 年を示す。
M(大文字) 月を示す。
d 日を示す。
H(大文字) 0時から23時を示す。
m 分を示す。

特定のフォーマットを指定する場合も、この表のフォーマットを用いる。
フォーマットは必要な桁数分指定する。
年を表すときは「yyyy」とyを4桁分指定していたので、実行結果は4桁で出力された。
また、取得した文字列よりもフォーマットで指定した桁数が多い場合「0」が補われる。
月を表すときに「MM」とMを2桁分指定しているが、月の文字列は1桁なので「0」が補われる。
なので例で月を表す文字列は、「02」となっている。

また、SimpleDateFormatクラスで指定できるフォーマットには次のフォーマットもある。

フォーマット 意味
s 秒を示す。
h 1時から12時を表す。(15時の場合、3となります)

さらに、特定のフォーマットを指定することもできる。
特定のフォーマットを指定する場合は次の順序で行う。

  1. Dateクラスを使い日時を取得する。
  2. SimpleDateFormatクラスのコンストラクタの引数に特定のフォーマットを渡して実行し、SimpleDateFormatクラスのオブジェクトを生成する。
  3. "1."で取得した日時を、"2."で生成したSimpleDateFormatクラスのオブジェクトでフォーマットする。

まず、Dateクラスのオブジェクトを生成して日時を取得する。
次に、SimpleDateFormatクラスのコンストラクタの引数に、特定のフォーマットを渡して実行し、SimpleDateFormatクラスのオブジェクトを生成する。以下の書式で実行できる。

SimpleDateFormat SimpleDateFormatクラスのオブジェクト = new SimpleDateFormat(特定のフォーマット);

取得した日時を、生成したSimpleDateFormatクラスのオブジェクトでフォーマットする。
デフォルトのフォーマットを指定する場合と同様に、以下の書式で実行できる。

生成したSimpleDateFormatクラスのオブジェクト.format(取得した日時)
package some.package;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateTime_Test4 {
   public static void main(String[] args) {
  	//現在日時を取得する
	Date date = new Date();
   	 
	//SimpleDateFormatクラスのコンストラクタの引数に、特定のフォーマットを渡して実行する。
	//その結果、SimpleDateFormatクラスのオブジェクトを生成する。
  	SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");

  	//取得した日時を、生成したSimpleDateFormatクラスのオブジェクトでフォーマットする
  	System.out.println(format.format(date));
	}
}
2023/02/25

この例では、特定のフォーマットとして「”yyyy/MM/dd”」を渡しているので、年月日のみが出力されている。

Discussion