Java 日付・時刻マスター:SimpleDateFormat、現在日時取得、日付比較
このチュートリアルでは、Java での日付と時刻の扱いの基本をカバーします:
- 現在の日付と時刻の表示
SimpleDateFormatでの日付フォーマットとパース- 2つの日付の比較
Java の Date オブジェクトは以下のコンポーネントを表します:

- 年(2桁または4桁)
- 月(数値、3文字略称、フルネーム)
- 日
- 曜日(例:Sun, Mon, Tue)
コンピュータはさらに多くの日付関連パラメータをサポートしており、後続セクションで説明します。
Java で現在日時を表示
Java の java.util.Date クラスは、現在のシステム日時を取得するシンプルな方法を提供します。最小限の例:
import java.util.Date;
class DateExample {
public static void main(String[] args) {
Date current = new Date();
System.out.println(current.toString());
}
}
出力:
Wed Nov 29 06:36:22 UTC 2017
出力はデフォルトの toString() 形式を使用します。カスタムレイアウトで日付を表示するには、明示的にフォーマットする必要があります。
SimpleDateFormat:日付のパースとフォーマット
Java はパターン文字列を使って日付をフォーマットし、文字を特定の日付コンポーネントにマッピングします。参照テーブル:
| 文字 | 日付/時刻コンポーネント | 例 |
|---|---|---|
| G | 紀元 | AD |
| y | 年 | 2018 |
| M | 月 | July, Jul, 07 |
| w | 年の週 | 27 |
| W | 月の週 | 2 |
| D | 年の日 | 189 |
| d | 月の日 | 10 |
| F | 月の何番目の曜日 | 2 |
| E | 曜日名 | Tuesday, Tue |
| u | 週の日番号(1=月…7=日) | 1 |
| a | AM/PM マーカー | PM |
| H | 時間(0-23) | 0 |
| k | 時間(1-24) | 24 |
| K | 午前/午後の時間(0-11) | 0 |
| h | 午前/午後の時間(1-12) | 12 |
| m | 分 | 30 |
| s | 秒 | 55 |
| S | ミリ秒 | 978 |
| z | タイムゾーン | Pacific Standard Time; PST; GMT-08:00 |
| Z | タイムゾーンオフセット | -0800 |
| X | タイムゾーン | -08, -0800, -08:00 |
特定のフォーマット文字列を構築する際はこのテーブルを参照してください。
SimpleDateFormat の使用
SimpleDateFormat クラスでパターンを定義し、日付をフォーマットまたはパースできます。例:
- 希望形式:2012.10.23 20:20:45 PST → パターン
yyyy.MM.dd HH:mm:ss zzz - 希望形式:09:30:00 AM 23-May-2012 → パターン
hh:mm:ss a dd-MMM-yyyy
ヒント: 大文字小文字に注意—月は M、分は m を使うことが必須です。
import java.text.SimpleDateFormat;
import java.util.Date;
class TestDatesFormat {
public static void main(String[] args) {
Date now = new Date();
System.out.println(now);
String pattern = "hh:mm:ss a dd-MMM-yyyy";
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
System.out.println(sdf.format(now));
}
}
出力:
Wed Nov 29 06:31:41 UTC 2017 06:31:41 AM 29-Nov-2017
日付の比較

Java での日付比較で最も信頼できるメソッドは compareTo() で、最初の日付が早ければ負の値、等しければゼロ、遅ければ正の値を返します。
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.Date;
class TestDatesCompare {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
Date date1 = sdf.parse("20-08-1981");
Date date2 = sdf.parse("12-10-2012");
System.out.println("Date1 : " + sdf.format(date1));
System.out.println("Date2 : " + sdf.format(date2));
if (date1.compareTo(date2) > 0) {
System.out.println("Date 1 occurs after Date 2");
} else if (date1.compareTo(date2) < 0) {
System.out.println("Date 1 occurs before Date 2");
} else {
System.out.println("Both dates are the same");
}
}
}
出力:
Date1 : 20-08-1981 Date2 : 12-10-2012 Date 1 occurs before Date 2
Java
- リアクティブDC回路における電圧と電流の計算
- C++日付と時刻の完全ガイド:ctimeライブラリの活用
- Pythonで現在の日付と時刻を取得する実践ガイド
- Pythonで現在時刻とタイムゾーンデータを簡単に取得する
- Python 日付と時刻の完全マスター:実践的ガイド
- Java演算子をマスター:種類、構文、実践例
- Javaコメント:種類、使い方、ベストプラクティス
- Java拡張forループをマスター:構文、例、ベストプラクティス
- Java日付時刻完全ガイド:Date/Calendar/SimpleDateFormat/printf
- Java 10の時間ベースリリースバージョニング:予測可能な半年ごとのアップデート
- Java 8 新Date/Time API徹底解説:堅牢で使いやすい日付時刻処理