【Java入門】SimpleDateFormatで日付フォーマットの設定

SimpleDateFormatで 日付フォーマットを設定する

Javaには日付を表示するときのフォーマットを設定することができます。この記事では、日付のフォーマットについて、

  • 【基礎】SimpleDateFormatクラスの日付のフォーマットとは
  • 【基礎】yyyy/MM/ddのフォーマットを設定する方法
  • 【基礎】他の日付のフォーマットに変更する方法
  • 【発展】日付をString型に変換する方法
  • 【発展】日付パターンをチェックする方法


などの基礎から発展した使い方についても解説していきます。今回はそんな日付のフォーマット処理について、さまざまな方法をわかりやすく解説します!

SimpleDateFormatクラスの日付パターンとは

日付のフォーマットを設定するには、SimpleDateFormatクラスを使用して、インスタンスの引数に日付フォーマットを指定する必要があります。

SimpleDateFormat sdf = new SimpleDateFormat(“フォーマットパターン”);

SimpleDateFormatクラスを使用するには、以下のパッケージをインポートします。

import java.text.SimpleDateFormat;

日付パターン文字列について表にまとめました。

文字説明出力例(記述例)
G紀元AD(G)
y1996(yyyy); 96(yy)
MJuly(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)
m30(mm)
s55(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クラスのフォーマットについては、以下の記事でも詳しく解説しています!

【Java入門】Calendarの日付フォーマットを指定する(format)
更新日 : 2019年10月16日

 

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のさまざまな型変換については、以下の記事で詳しく解説しています!

JavaでString(文字列)を変換する方法まとめ(short,int,long等に変換)
更新日 : 2019年6月6日

日付パターンをチェックする方法

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クラスのさまざまな使い方については以下の記事にまとめていますので、ぜひ参考にしてくださいね!

【Java】Dateクラスで日付を扱う方法を5つのパターン別に解説
更新日 : 2019年10月14日

まとめ

ここでは、日付のフォーマット指定について基本的な方法やString型に変換する方法、日付のチェック方法などを説明しました。日付のフォーマットはさまざまなパターンで出力することができますので、この機会に覚えておきましょう!

もし日付のフォーマットを指定する方法を忘れてしまったら、この記事を思い出してくださいね!

LINEで送る
Pocket

SEからWebエンジニアへ転職した理由

侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
更新日 : 2019年10月7日

書いた人

中沢 丈

中沢 丈

フリーランスエンジニア。
システム開発からコンテンツ作成まで幅広く対応します。

連絡先はこちらです。
[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説