Dateクラス:日時情報の保持
java.util.Dateは、特定の時点(ミリ秒精度)を表すクラスです。JDK 1.1以降、多くのメソッドが非推奨(Deprecated)となりましたが、現在でもデータの保持や古いライブラリとの連携において利用されています。
| コンストラクタ | 説明 |
|---|---|
Date() |
実行時のシステム時刻でインスタンスを生成します。 |
Date(long date) |
1970年1月1日 00:00:00 GMTからの経過ミリ秒を指定して生成します。 |
| 主要メソッド | 説明 |
|---|---|
long getTime() |
エポックタイムからの経過ミリ秒を返します。 |
void setTime(long time) |
ミリ秒値を指定して、オブジェクトが指す日時を更新します。 |
SimpleDateFormatクラス:書式設定と解析
SimpleDateFormatは、Dateオブジェクトを人間が読みやすい文字列に変換(フォーマット)したり、逆に文字列をDateオブジェクトに変換(パース)したりするために使用されます。
主要なパターン文字
y: 年M: 月d: 日H: 時 (0-23)m: 分s: 秒E: 曜日a: 午前/午後
// 日時を指定したフォーマットで出力する例
SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss E");
Date now = new Date();
String formattedText = formatter.format(now);
System.out.println(formattedText); // 例: 2024/05/10 14:30:15 金
応用:経過日数の計算
ユーザーが入力した誕生日から、現在までの経過日数を計算するロジックの例です。
public void calculateLifeStats(String birthInput) throws ParseException {
// 入力形式を定義
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 文字列をDate型に変換
Date birthDate = sdf.parse(birthInput);
Date today = new Date();
// 差分(ミリ秒)を取得
long diffInMillis = today.getTime() - birthDate.getTime();
// 単位変換
long daysLived = diffInMillis / (1000L * 60 * 60 * 24);
long approximateYears = daysLived / 365;
System.out.println("生誕から " + daysLived + " 日が経過しました。");
System.out.println("およそ " + approximateYears + " 歳です。");
}
Calendarクラス:日時の操作とフィールド抽出
Calendarは抽象クラスであり、特定のカレンダーシステム(主にグレゴリオ暦)に基づいた日時操作を提供します。年、月、日などの特定のフィールドを個別に取得・変更する際に適しています。
インスタンスの取得と値の取得
Calendar.getInstance()を使用して、ロケールやタイムゾーンに基づいたインスタンスを取得します。
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
// 月は0から始まるため、+1が必要
int month = cal.get(Calendar.MONTH) + 1;
int day = cal.get(Calendar.DAY_OF_MONTH);
System.out.println(year + "年" + month + "月" + day + "日");
日時の設定と加減算
setメソッドで特定の値を設定し、addメソッドで時間の進退を計算します。
Calendar calendar = Calendar.getInstance();
// 特定の日時を設定 (2025年12月25日)
calendar.set(2025, Calendar.DECEMBER, 25);
// 10日後を計算
calendar.add(Calendar.DAY_OF_MONTH, 10);
System.out.println("10日後の日付: " + calendar.getTime());
// 2ヶ月前を計算
calendar.add(Calendar.MONTH, -2);
System.out.println("2ヶ月前の日付: " + calendar.getTime());
注意点として、Calendar.MONTHは「0」が1月を表す仕様であるため、定数(Calendar.JANUARYなど)を使用することで可読性を高めることができます。また、週の始まりは地域設定に依存しますが、一般的に日曜が「1」として扱われます。