Javaで日時(日付と時刻)を扱う方法

日付と時刻に関するクラス

クラス 説明
java.sql.Date SQLのDATE型
java.text.SimpleDateFormat 日付と時刻のフォーマット(書式)を扱うクラス
java.util.Calendar 暦を表すクラス
java.util.Date 日付と時刻を表すクラス

java.util.Dateクラス

java.util.Date は日付と時刻を表すクラスであり、ミリ秒単位の精度を持つ。

public class Date
extends Object
implements Serializable, Cloneable, Comparable<Date>

SQLのDATE型はjava.sql.Dateであり、java.util.Dateとは異なる。

java.util.Dateクラスのコンストラクタ
コンストラクタ 説明
Date() Dateオブジェクトを作成し、現在の日付と時刻で初期化する。
Date(long date) Dateオブジェクトを作成し、指定した日時(1970年1月1日 00:00:00からのミリ秒数)で初期化する。
java.util.Dateクラスのメソッド
メソッド 説明
getTime 1970年1月1日 00:00:00 GMTからのミリ秒を返す。
java.util.Date now = new java.util.Date();
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy'年'MM'月'dd'日'");
System.out.println(sdf.format(now));

java.util.Calendar

java.util.Calendar は暦を表す抽象クラスである。

public abstract class Calendar
extends Object
implements Serializable, Cloneable, Comparable<Calendar>

インスタンス化

java.util.Calendar抽象クラスであるため、new 演算子で直接インスタンス化することはできない。

$ more Example.java
import java.util.Calendar;

public class Example {
  public static void main(String[] args) {
    Calendar today = new Calendar();
    System.out.println(today.get(Calendar.YEAR));
  }
}
$ javac Example.java
Example.java:5: error: Calendar is abstract; cannot be instantiated
                Calendar today = new Calendar();
                                 ^
1 error

java.util.Calendar 抽象クラスをインスタンス化するには、getInstance 静的メソッドを使う。静的メソッドとは、クラスをインスタンス化せずに呼び出せるメソッドのことである。

$ more Example.java
import java.util.Calendar;

public class Example {
  public static void main(String[] args) {
    Calendar today = Calendar.getInstance();
    System.out.println(today.get(Calendar.YEAR));
  }
}
$ javac Example.java
$ java Example
2023

get()

指定されたカレンダ・フィールドの値を返す。

public int get(int field)

get メソッドには以下に示すフィールドを指定できる。

get メソッドの引数に指定するフィールド
フィールド 説明
AM_PM HOUR が正午より前であるかあとであるかを示す。
DATE 月の日を示す。
DAY_OF_MONTH 月の日を示す。
DAY_OF_WEEK 曜日を示す。
DAY_OF_WEEK_IN_MONTH 現在の月の何度目の曜日かを示す。
DAY_OF_YEAR 現在の年の何日目かを示す。
DST_OFFSET 夏時間のオフセットをミリ秒単位で示す。
ERA ユリウス暦のADまたはBCなどの年代を示す。
HOUR 午前または午後の何時かを示す。
HOUR_OF_DAY 時間を示す。
MILLISECOND ミリ秒を示す。
MINUTE 分を示す。
MONTH 月を示す。
SECOND 秒を示す。
WEEK_OF_MONTH 現在の月の週番号を示す。
WEEK_OF_YEAR 現在の年の週番号を示す。
YEAR 年を示す。
ZONE_OFFSET GMTから直接計算したオフセットをミリ秒単位で示す。
import java.util.Calendar;

public class Example {
  public static void main(String[] args) {
    Calendar today = Calendar.getInstance();
    /* calendar fields */
    System.out.println(today.get(Calendar.YEAR));
    System.out.println(today.get(Calendar.MONTH));
    System.out.println(today.get(Calendar.DATE));
  }
}

文字列をCalendar型に変換

String型をCalendar型に変換する。

String date = "2017年06月14日";
Calendar calendar = Calendar.getInstance();
try {
  calendar.setTime(new SimpleDateFormat("yyyy年MM月dd日").parse(date));
} catch (ParseException e) {
  e.printStackTrace();
}

Calendar型を文字列に変換

Calendar型をString型に変換する。

Calendar now = Calendar.getInstance();
String tody = new SimpleDateFormat("yyyy年MM月dd日").format(now.getTime());

1日後の日付

1日後の日付を求める例を以下に示す。

Calendar now = Calendar.getInstance();
now.add(Calendar.DATE, 1);

1日前の日付

1日前の日付を求める例を以下に示す。

Calendar now = Calendar.getInstance();
now.add(Calendar.DATE, -1);

1か月後の日付

1か月後の日付を求める例を以下に示す。

Calendar now = Calendar.getInstance();
now.add(Calendar.MONTH, 1);

1か月前の日付

1か月前の日付を求める例を以下に示す。

Calendar now = Calendar.getInstance();
now.add(Calendar.MONTH, -1);

1年後の日付

1年後の日付を求める例を以下に示す。

Calendar now = Calendar.getInstance();
now.add(Calendar.YEAR, 1);

1年前の日付

1年前の日付を求める例を以下に示す。

Calendar now = Calendar.getInstance();
now.add(Calendar.YEAR, -1);

月初の日付

月初(1日)の日付を求める例を以下に示す。

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH, 1);

月末の日付

月末の日付を求める例を以下に示す。

Calendar calendar = Calendar.getInstance();
int max = calendar.getActualMaximum(Calendar.DATE);