目次
日付の書式
Javaで日付型(Date)の値を画面に出力する場合、フォーマッタを利用して日付を見やすくフォーマットします。
この記事では、Javaの日付型(Date)の値を、”2019/12/31″や”2019年12月31日”のように見やすくフォーマットする方法と、逆に文字列(String)から日付型(Date)に変換する方法を解説します。
SimpleDateFormatクラスを使う
日付(Date)をフォーマットする
この章では、日付型(Date)の値を、書式指定してフォーマットする方法を解説します、
早速サンプルコードを見てみましょう。
Javaで日付をフォーマットする時は、SimpleDateFormatクラスを使用します。次のサンプルコードは、日付型(Date)の年月日の間にスラッシュを入れて、日付をフォーマットしています。
import java.util.Calendar; import java.text.SimpleDateFormat; public class Main { public static void main(String[] args) { //本日日付のCalendarクラスのインスタンスを生成する Calendar c = Calendar.getInstance(); //SimpleDateFormatのフォーマットパターンを設定 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); //日付をフォーマットした結果をコンソールに出力 System.out.println(sdf.format(c.getTime())); } }
コードを実行すると、下の実行結果のように、日付がスラッシュ編集された結果が表示されます。
▪️ 実行結果
2019/11/23
フォーマットのパターン
前述したサンプルコードのように、SimpleDateFormatクラスを使用する場合は、コンストラクタの引数に、フォーマットパターンを指定します。
使用できるフォーマットパターンは、Javaの公式ドキュメントで紹介されていますので、以下のリンクを参照してください。
SimpleDateFormat
SimpleDateFormatはスレッドセーフではない
SimpleDateFormatはスレッドセーフなクラスではないため、同じインスタンスを複数のスレッド間て共有すると、正しい結果にならないことがあり注意が必要です。
対策として、スレッド毎にインスタンスを毎回生成するか、後述するDateTimeFormatterを使用します。
Java8で追加されたDateTimeFormatter
DateTimeFormatterとは
DateTimeFormatterクラスは、Java8で追加された日付型(Date)をフォーマットするクラスです。
早速、DateTimeFormatterクラスを使用して、日付をフォーマットするサンプルコードを見てみましょう。
import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; public class Main { public static void main(String[] args) throws DateTimeParseException { // ofPatternスタティックメソッドでフォーマットを指定してインスタンスを生成する DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); // 書式を指定してLocalDateTimeのインスタンスを作成する LocalDateTime dt = LocalDateTime.parse("2019/11/30 12:50:00", dtf); System.out.println(dt); // 本日日付を、DateTimeFormatterで指定したフォーマットで文字列に変換 String str = LocalDateTime.now().format(dtf); System.out.println(str); } }
上のコードを実行すると、以下のような内容がコンソールに出力されます。
▪️ 実行結果
2019-11-30T12:50 2019/11/30 01:39:08
では、紹介したサンプルコードについて解説します。
まず、以下の行では、DateTimeFormatter.ofPatternメソッドで、フォーマットパターンを指定してインスタンスを作成しています。
指定できるフォーマットパターンは、SimpleDateFormatクラスと基本同じですが、詳しくは以下のJavaドキュメントを参照してください。
DateTimeFormatter
// ofPatternスタティックメソッドでフォーマットを指定してインスタンスを生成する DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
以下の行では、文字列の日付を、LocalDateTimeのparseメソッドで日付型(LocalDateTime)に変換しています。この時、parseメソッドの第二引数に、フォーマットパターンを指定したDateTimeFormatterクラスのインスタンスを渡しているのがポイントです。
// 書式を指定してLocalDateTimeのインスタンスを作成する LocalDateTime dt = LocalDateTime.parse("2019/11/30 12:50:00", dtf);
最後の行では、DateTimeFormatterクラスのformatメソッドを使用して、LocalDateTime型の日付を文字列にフォーマットしています。
// 本日日付を、DateTimeFormatterで指定したフォーマットで文字列に変換 String str = LocalDateTime.now().format(dtf);
LocalDateTimeとは。
Java8以前までは、の日付型としてDateやCalendarクラスが使われていましたが、Java 8以降は新しくLocalDateTimeやZonedDateTimeクラスを使用することが推奨されています。
Javaの日付処理をマスターしよう
Javaの日付をフォーマットする方法や、文字列を日付型に変換する方法を解説してきました。
日付の処理は、どのようなシステムでも必ず行われると言っても過言ではないほど、よく出てくる処理です。以下の記事も参考にして、Javaの日付処理をマスターしましょう。
【関連記事】
▶【Java】初心者必見!日付を扱うDateクラスの簡単講座
地域や言語によってフォーマットを切り替えるには、SimpleDateFormatに渡すフォーマットパターンをユーザ毎に切り替えられるようにするか、J2SEの公式ドキュメントで推奨されている、DateFormatクラスのgetTimeInstance()、getDateInstance()、または getDateTimeInstance()メソッドでフォーマッタを取得する方法で対応できます。