バナー画像

日付の書式

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を使用します。

ポテパンダの一言メモ

地域や言語によってフォーマットを切り替えるには、SimpleDateFormatに渡すフォーマットパターンをユーザ毎に切り替えられるようにするか、J2SEの公式ドキュメントで推奨されている、DateFormatクラスのgetTimeInstance()、getDateInstance()、または getDateTimeInstance()メソッドでフォーマッタを取得する方法で対応できます。

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クラスの簡単講座

【Java入門】日付情報を取得出来るCalendarクラスを理解しよう!

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。