Javaには日付を表示するときのフォーマットを設定することができます。この記事では、日付のフォーマットについて、
- 【基礎】SimpleDateFormatクラスの日付のフォーマットとは
- 【基礎】yyyy/MM/ddのフォーマットを設定する方法
- 【基礎】他の日付のフォーマットに変更する方法
- 【発展】日付をString型に変換する方法
- 【発展】日付パターンをチェックする方法
などの基礎から発展した使い方についても解説していきます。今回はそんな日付のフォーマット処理について、さまざまな方法をわかりやすく解説します!
なお、Javaの記事については、こちらにまとめています。
SimpleDateFormatクラスの日付パターンとは
日付のフォーマットを設定するには、SimpleDateFormatクラスを使用して、インスタンスの引数に日付フォーマットを指定する必要があります。
SimpleDateFormat sdf = new SimpleDateFormat(“フォーマットパターン”);
SimpleDateFormatクラスを使用するには、以下のパッケージをインポートします。
import java.text.SimpleDateFormat;
日付パターン文字列について表にまとめました。
文字 | 説明 | 出力例(記述例) |
---|---|---|
G | 紀元 | AD(G) |
y | 年 | 1996(yyyy); 96(yy) |
M | 月 | July(MMMM); Jul(MM); 07(MM) |
w | 年における週 | 27(ww) |
W | 月における週 | 2(W) |
D | 年における日 | 189(DDD) |
d | 月における日 | 10(dd) |
F | 月における曜日 | 2(F) |
E | 曜日の名前 | Tuesday(EEEEEEE); Tue(EEE); |
u | 曜日の番号(1:月曜、・・・7:日曜) | 1(u) |
a | 午前/午後 | PM(a) |
H | 一日における時(0 – 23) | 00(HH) |
k | 一日における時(1 – 24) | 24(kk) |
K | 午前/午後の時(0 – 11) | 00(KK) |
h | 午前/午後の時(1 – 12) | 12(hh) |
m | 分 | 30(mm) |
s | 秒 | 55(ss) |
S | ミリ秒 | 978(SSS) |
z | 一般的なタイムゾーン | Pacific Standard Time; PST; GMT-08:00 |
記述するパターン例については以下のとおりです。
パターン | 表示例 |
---|---|
“yyyy.MM.dd G ‘at’ HH:mm:ss z” | 2001.07.04 AD at 12:08:56 PDT |
“EEE, MMM d, ‘’yy” | Wed, Jul 4, ’01 |
“h:mm a” | 12:08 PM |
日付パターンは、大文字と小文字が明確に区別されていますので、指定時には注意しましょう。なおオラクルの公式サイトには、日付パターンの詳細が記載されています。
https://docs.oracle.com/javase/jp/8/docs/api/java/text/SimpleDateFormat.html
yyyy/MM/ddのフォーマットで設定する方法
以下に“yyyy/MM/dd”の日付パターンでフォーマットを設定する方法を記述します。
import java.util.Calendar; import java.text.SimpleDateFormat; public class Main { public static void main(String[] args) { //Calendarクラスのオブジェクトを生成する Calendar cl = Calendar.getInstance(); //SimpleDateFormatクラスでフォーマットパターンを設定する SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); System.out.println(sdf.format(cl.getTime())); } }
実行結果:
2017/04/06
このサンプルコードでは、SimpleDateFormatクラスを使用して、引数に“yyyy/MM/dd”の日付パターンでフォーマットを指定しています。
そして、SimpleDateFormatクラスの日付パターンを返すformatメソッドを使用しています。引数にはCalendarクラスのgetTimeメソッドを指定して現在の日時を取得しています。
他の日付フォーマットに変更する方法
日付のフォーマットを変更する場合は、SimpleDateFormatクラスのapplyPatternメソッドを使用します。そしてSimpleDateFormatクラスのインスタンス同様、引数にフォーマットパターンを指定します。
以下に日付フォーマットを変更する方法を記述します。
import java.util.Calendar; import java.text.SimpleDateFormat; public class Main { public static void main(String[] args) { //カレンダークラスのオブジェクトを生成する Calendar cl = Calendar.getInstance(); //フォーマットを指定する SimpleDateFormat sdf = new SimpleDateFormat("変更前:yyyy/MM/dd"); System.out.println(sdf.format(cl.getTime())); //フォーマットをフォーマットを変更する sdf.applyPattern("変更後:yyyy年MM月dd日 E"); System.out.println(sdf.format(cl.getTime())); } }
実行結果:
変更前:2017/04/06 変更後:2017年04月06日 Thu
Calendarクラスのフォーマットについては、以下の記事でも詳しく解説しています!
Date型とString型の相互変換
Date型で処理をしてString型に変換したり、また逆にString型の日付データからDate型に変更して処理を行う場合もあります。Date型をString型に変換する方法やString型をDate型に変更する方法についてみていきましょう!
Date型をString型に変換する
Date型をString型に変換するためには、StringクラスのvalueOfメソッドを指定して、引数に日付型を指定します。
String.valueOf(date型);
以下にDate型をString型に変換する方法を記述します。
import java.util.Date; public class Main { public static void main(String[] args) { Date date = new Date(); String str = String.valueOf(date); System.out.println(str); } }
実行結果:
Thu Apr 06 09:59:22 UTC 2017
String型をDate型に変換する
String型の日付をDate型に変換するには、SimpleDateFormatクラスのparseメソッドを使用します。
SimpleDateFormat.parse(String型);
import java.util.Date; import java.text.ParseException; import java.text.SimpleDateFormat; public class Main { public static void main(String[] args) { String str = "20170401 12:00:00"; SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm:ss"); try { Date date = sdf.parse(str); System.out.println(date.toString()); } catch(ParseException e) { e.printStackTrace(); } } }
実行結果:
Sat Apr 01 12:00:00 UTC 2017
SimpleDateFormatクラスのparseメソッドを使うにはthrows句を使ってParseExceptionなどに例外を投げるか、try-catch構文で例外処理を行う必要がありますので注意しましょう。なおStringのさまざまな型変換については、以下の記事で詳しく解説しています!
日付パターンをチェックする方法
SimpleDateFormatクラスは、日付パターンを存在しないパターンなどに設定するとIllegalArgumentExceptionの例外が発生します。しかし、日付設定時に存在しない日付を設定しても例外は発生しません。
そのため、設定した日付が正しいかチェックするには、日付を設定する前にSimpleDateFormatクラスのsetLenientメソッドを使用します。setLenientメソッドの引数にはfalseを設定する必要があります。
SimpleDateFormat.setLenient(false);
以下に設定した日付をチェックする方法を記述します。
import java.text.ParseException; import java.text.SimpleDateFormat; public class Main { public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); sdf.setLenient(false); try{ sdf.parse("2017/4/35"); System.out.println("正しい日付です"); } catch (ParseException e){ System.out.println("正しい日付ではありません"); } } }
実行結果:
正しい日付ではありません
このサンプルコードでは存在しない日付”2017/4/35”を設定しました。事前にSimpleDateFormatクラスのsetLenientメソッドにfalseを指定しておけば、日付設定時に日付の妥当性をチェックしてくれます。
Date型についてもっと詳しく知りたい方へ
Dateクラスのさまざまな使い方については以下の記事にまとめていますので、ぜひ参考にしてくださいね!
まとめ
ここでは、日付のフォーマット指定について基本的な方法やString型に変換する方法、日付のチェック方法などを説明しました。日付のフォーマットはさまざまなパターンで出力することができますので、この機会に覚えておきましょう!
もし日付のフォーマットを指定する方法を忘れてしまったら、この記事を思い出してくださいね!