JavaのSimpleDateFormatで使えるフォーマットパターン文字の一覧と使い方
java.text.SimpleDateFormatクラスは、文字列を日付(Date)に変換したり、日付を指定した形式の文字列に整形したりするために使用されるクラスです。本記事では、SimpleDateFormatで利用できるフォーマットパターン文字の一覧と、実際のコード例をわかりやすく解説します。
日付文字列の解析(パース)方法
SimpleDateFormatクラスのコンストラクタの一つは、目的の日付フォーマットを表すString型の値を受け取り、SimpleDateFormatオブジェクトを生成します。文字列をDateオブジェクトとして解析・変換する手順は以下の通りです。
- 希望するフォーマット文字列を引数に渡して、SimpleDateFormatクラスをインスタンス化します。
- parse()メソッドを使って、日付文字列を解析します。
以下は、日付のフォーマットに使用できる文字(パターン文字)とその意味、出力例の一覧です。
| 文字 | 意味 | 例 |
|---|---|---|
| G | 紀元(時代)の指定 | AD, BC |
| y | 年 | 2005, 96 |
| Y | 暦週の基準年(Week year) | 2005, 96 |
| M | 月 | September, Sep, 09 |
| L | 月(スタンドアロン形式) | September, Sep, 09 |
| w | 年における週番号 | 23 |
| W | 月における週番号 | 3 |
| D | 年における通算日数 | 129 |
| d | 月における日にち | 27 |
| F | 月内の曜日の出現回数(第何〇曜日か) | 5 |
| E | 曜日(名称) | Monday, Mon |
| u | 曜日(番号) | 1 |
| a | 午前/午後(AM/PM) | PM, AM |
| H | 時(0〜23) | 0, 22 |
| k | 時(1〜24) | 1, 12, 24 |
| K | 午前/午後の時(0〜11) | 0, 5, 11 |
| h | 午前/午後の時(1〜12) | 1, 5, 12 |
| m | 分 | 25 |
| s | 秒 | 24 |
| S | ミリ秒 | 756 |
| z | タイムゾーン(名称) | PST, GMT |
| Z | タイムゾーン(RFC 822形式) | -0500 |
| X | タイムゾーン(ISO 8601形式) | -06, -0600, -06:00 |
コード例:日付文字列の解析
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Sample {
public static void main(String args[]) throws ParseException {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy/dd/MM");
Date date = formatter.parse("2007/25/06");
System.out.println("Date value: "+date);
formatter = new SimpleDateFormat("y:G");
date = formatter.parse("1920:BC");
System.out.println("Date value: "+date);
formatter = new SimpleDateFormat("D-M-Y");
date = formatter.parse("25-05-1989");
System.out.println("Date value: "+date);
}
}
実行結果
Date value: Mon Jun 25 00:00:00 IST 2007 Date value: Sun Jan 01 00:00:00 IST 1920 Date value: Sun Jan 01 00:00:00 IST 1989
上記の例では、「yyyy/dd/MM」のように複数のパターン文字を組み合わせることで、任意の形式の日付文字列を解析できます。「y:G」は年と紀元、「D-M-Y」は年間通算日・月・週基準年の組み合わせです。
コード例:時刻や曜日を含む解析
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Sample {
public static void main(String args[]) throws ParseException {
SimpleDateFormat formatter1 = new SimpleDateFormat("HH:mm:ss");
Date time1 = formatter1.parse("07:25:30");
System.out.println("Date value: "+time1);
SimpleDateFormat formatter2 = new SimpleDateFormat("EEE:MMM-d:YYYY");
Date time2 = formatter2.parse("Sun:Jan-8:2018");
System.out.println("Date value: "+time2);
SimpleDateFormat formatter3 = new SimpleDateFormat("hh 'o''clock' a");
Date time3 = formatter3.parse("09 o'clock AM");
System.out.println("Date value: "+time3);
}
}
実行結果
Date value: Thu Jan 01 07:25:30 IST 1970 Date value: Sun Dec 31 00:00:00 IST 2017 Date value: Thu Jan 01 09:00:00 IST 1970
3つ目の例のように、シングルクォート(')で囲んだテキストはリテラル(固定文字列)として扱われます。これにより「o'clock」のような文字を含む独自フォーマットも解析可能になります。
なお、SimpleDateFormatはスレッドセーフではないため、マルチスレッド環境では注意が必要です。Java 8以降を使用している場合は、より安全で機能豊富なjava.time.format.DateTimeFormatterの利用も検討するとよいでしょう。
-
Javaのクラスメソッド(静的メソッド)とは?基本から使い方まで解説
Javaにおけるクラスメソッド(静的メソッド)とは、特定のオブジェクトのインスタンスではなく、クラスそのものに対して呼び出されるメソッドのことです。static修飾子を付けることで、すべてのクラスインスタンス間で同じ実装が保証されます。静的メソッドはインスタンス化せずに呼び出すことができるため、アクセスできるのはクラス内の他の静的メンバー(staticなフィールドやメソッド)のみです。インスタンス変数や非staticメソッドには直接アクセスできない点に注意しましょう。Javaの標準ライブラリにも多くの静的メソッドが用意されています。代表的な例としては、Math.random()、System.
-
Javaにおける到達不能なcatchブロックとは?原因とコンパイルエラーの仕組みを解説
到達不能ブロック(Unreachable Block)とはどのような状況でも制御が決して到達しない文のまとまりは、到達不能ブロック(unreachable block)と呼ばれます。Javaでは、このような到達不能なコードはサポートされておらず、コンパイルエラーとなります。特に複数のcatchブロックを記述する場合には注意が必要です。Exceptionクラスを参照するcatchブロックは必ず最後に配置しなければなりません。これは、Exceptionがすべての例外クラスのスーパークラス(親クラス)であるためです。つまり、複数のcatchブロックを並べる際には、具体的な例外クラスから順に、より一般