【Java入門】Date型の使い方(フォーマット・比較)

こんにちは!フリーライターの中井です。

Javaには日付の管理を行うDateクラスがあります。この記事では、

  • Date型のフォーマットとは
  • フォーマットを整え日本語らしい表示にする方法
  • Date型の比較をする方法

という基本的な内容から、

  • 不正な日付をチェックする方法
  • Date型とString型を相互に変換する方法

などの応用的な使い方に関しても解説していきます。

Date型のフォーマットとは

日本語らしく表示するためのツール

Date型のフォーマットは、日付をわかりやすく表示するために用意されています。試しにシンプルにDate型を使い、今日の日付を取得しても結果は以下のように表示されます。

Thu Apr 06 14:45:52 JST 2017

あなたは、この結果をみて分かりやすいと感じたでしょうか?ほぼ99%の人がこの表示は分かりにくいと感じていることでしょう。2017年4月6日木曜日14時28分45秒と表示すると一段と分かりやすくなります。

では、フォーマットの使い方を理解して分かりやすい日本語表記にしていきましょう。

フォーマットの使い方

フォーマットを使うには、SimpleDateFormatクラスを使用します。このクラスで誰の目から見ても分かりやすい日本語の日付表示に直すことができます。

import java.text.SimpleDateFormat;
import java.util.Date;

public class JavaDateSample {

    public static void main(String[] args) {
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy'年'MM'月'dd'日'E'曜日'k'時'mm'分'ss'秒'");
        System.out.println(sdf.format(date));
    }
    
}

実行結果

2017年04月06日木曜日14時50分52秒
  • SimpleDateFormatはjava.textパッケージに含まれるのでimport文を記載
  • SimpleDateFormatをインスタンス化しフォーマットを指定

(今回は、2017年04月06日木曜日14時50分52秒と出るように指定しています)

重要なのは、フォーマットの指定方法です。フォーマットに日本語を混ぜたい場合には、(シングルクォテーション)で挟み込みます。

例えば、2017年と表示させたいときは”yyyy’年’”と年の前後に’を使いましょう。またyは年、Mは月、dは日、Eは曜日、kは時、mは分、sは秒と決まっているので合わせて覚えると自分なりに分かりやすいフォーマットをすんなり作ることができます。

フォーマットでよく使われるパターン文字

パターン文字とは、フォーマットを指定する時にyyyyやMMやddそしてkやEのことを指します。今回では、プログラムを組む時に、よく使うパターン文字を表にしたので合わせて覚えておきましょう。

時間パターン文字と説明
y (yyと打つと西暦の下2桁17が表示、yyyyと打つと西暦2017が表示される))
M(月を表示。MMと打つと1~9月の場合は01~09と0がつく。M1個の場合は0がつかない。間違えてmと打つと時間の分と認識されるので注意が必要)
d(日を表示。ddと打つと1~9日の場合は01~09と0がつく。d1個の場合は0がつかない)
曜日E(曜日を表示する。日月火水木金土と日本語表示になる)
k(時間を表示。kを指定すると24時間表記になり分かりやすい)
h(時間を表示するが12時間制。午前か午後か分からないので、hを使う場合は前にa(午前か午後を時間から自動判別)を使わないと混同のもと。hhで1~9時の間に0がつく。)
m(分を表示。mmで1~9分の間に0がつく。m1個だと0がつかない。)
s(秒を表示。ssで1~9秒のときに0がつく。s1個だと0がつかない。)
ミリ秒S(ミリ秒を表示。小文字のsを書くと秒を認識されるので注意)

Date型の比較をする方法

Date型の比較する方法は、compareToメソッドを使用します。詳細は以下からお願いします。

不正な日付をチェックする方法

例えば、日付に4月32日と打ったとしましょう。もちろん、我々の目視ではこの日付間違っているとわかりますが、そのままプログラムを組むと、この日付は5月1日と勝手に認識されチェックが通ってしまいます。

それでは困りますよね?きちんと日付ではないことを明確にしてやるには、SimpleDateFormatクラスのsetLenientメソッドを使います。

setLenientメソッドの書き方

sdf(クラスの変数名).setLenient(false);
  • setLenientメソッドの引数は、trueかfalseのboolean型
  • falseにすると、厳格な日付のチェックが行なえます
  • 単独では使用されず、必ずクラス名の変数とセットで使います

setLenientメソッドの使い方

import java.text.ParseException;
import java.text.SimpleDateFormat;

public class Main {  
    public static void main(String[] args) {
        String strDate = "2017/04/32";
       
        try{    
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
            sdf.setLenient(false);
            sdf.parse(strDate);
            System.out.println(strDate + "は日付です");
        }catch(ParseException e){
            System.out.println(strDate + "は日付ではありません");
        }
    }
    
}

実行結果

2017/04/32は日付ではありません
  • sdf.setLenient(false)で、日付のチェックを厳格化
  • sdf.parse(strDate)で文字列の日付をDate型に変換するときにチェック行い、正しい日付でない場合にParseExceptionの例外を発生
  • このプログラムは、2017/4/32の日付は厳格にチェックを行い日付ではないことをエラーとして出力しています。初期の状態ではsetLenientはtrueになっているので、厳格にチェックをする場合は、setLenientメソッドをfalseにすることを忘れないでください。

    Date型とString型を相互に変換する方法

    Date型からString型に変更するには、フォーマットを指定してから変換し、String型からDate型に変換するには、sdf.parse(strDate文字列型)で変換します。詳細は以下からお願いします。

    Date型についてもっと詳しく知りたい方へ

    Dateクラスのさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!

    まとめ

    今回は、Date型におけるフォーマットの使い方と、誤りな日付を指定するとエラーで返す方法をメインでお伝えしました。日付のフォーマットは、大文字、小文字と区別して覚えないときちんとしたプログラムが組めなくなるから要注意です。

    M(月)とm(分)、s(秒)とS(ミリ秒)はそれぞれ意味が違うのできっちりと理解しましょう。日付を理解しているとゲームにおける日付指定のオプションが組めるようになります。

    LINEで送る
    Pocket

    ITエンジニアへ転職したい方におすすめ

    自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
    エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

    しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

    こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

    そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

    侍ワークスは、独自案件を多く掲載しているだけでなく、

    ・応募から就業まで一貫したサポート

    ・就業後もアフターフォロー

    といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

    まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

    書いた人

    中井

    中井

    フリーライター。
    主に美容系、ライフスタイル系含めこれまでに500本以上執筆。
    趣味はオンラインゲームにフリーソフトの情報収集。

    プログラミンとの出会い
    -----------------------------------------------------------------------------------------
    PCとプログラミングは大学からです。
    それまでは、PCは触ると壊れると思い込んでました。

    大学の授業で面白そうな理由でJavaを専攻。
    全然授業についていけず、後ろの席の子に課題をやってもらってました。

    そんなプログラミング音痴な状態で社会人を迎え、先輩からVBAがオススメと言われVBAを職場の人から教えてもらい習得。
    その後、自分の業務に携わるものおは全てVBAを組みました。

    会社を退職後、再度Javaを勉強する機会に恵まれ、大学でわからなかったことが一気に理解できるように。
    念願のAndroidアプリでTwitterのクライアントアプリを作れるまでになりました。
    以後、文章の修行の傍らJavaの最新情報を追う日々が続いています。