【Java】初心者必見!日付を扱うDateクラスの簡単講座
  • facebookページ
  • twitterページ
  • 2019.09.12

    【Java】初心者必見!日付を扱うDateクラスの簡単講座

    JavaではDateクラスを使うことで簡単に日付の取得や変更を行うことが出来ます。

    別の記事でFileクラスについての説明もしていますが、このDateクラスも開発ということにおいては必要不可欠な要素でありプログラミングの基礎でもあります。

    学習中の方の中には漠然とは理解しているけど具体的な理解には至っていないという方もいるかもしれませんので、今回の記事でより深い理解に繋がれば嬉しいです。

    Dateクラスとは

    そもそもDateクラスとは何型のクラスか?という部分ですが、日付型というクラスです。

    簡単に言い換えると、日付を扱う上で使用する全てのメソッドはこのDateクラスに揃っています。

    他クラスのインスタンスとの違いは、Dateインスタンスは生成した時点でクラスオブジェクトに現在の日付が返されることであり、Dateクラスを使うためにインポートするものも「java.util.Date」のみと至ってシンプルです。

    Dateクラスオブジェクトの記述ルールは次のようになっています。

    基本的な使い方

    まずは基本的な使い方から見てみましょう。
    次のコードではオブジェクトを生成し、現在の日付を出力する方法が記述してあります。

    実行結果

    このコードではDateクラスオブジェクトを生成してそのまま出力しています。

    上の説明で触れたように何もせずダイレクトに出力させるだけでコンパイル時の日付が返ってきているのが分かります。

    ただしこのままではあまり使い道がないことも事実ですので、次はこのデータを成形していくための方法を紹介します。

    フォーマットを指定する

    先ほどDateクラスでコンパイル時の日付を出力しました。今回はこのデータを基にSimpleDateFormatクラスを使って成形してみます。

    次のコードを見てください。

    まず(1)でDateオブジェクトを生成しています。

    続いて(2)でSimpleDateFormatクラスを生成、引数にフォーマットパターンを記述します。

    最後に(3)でformatメソッドを使い(2)で指定したフォーマットパターンに沿って出力させています。

    なおSimpleDateFormatクラスを使うためには次のパッケージをインポートする必要が有ります。

    日付のチェック

    SimpleDateFormatクラスはフォーマットパターンで存在しないパターンを設定すると”IllegalArgumentException”の例外が発生しますが、日付の設定に存在しない日付を設定しても例外が発生しません。

    設定した日付が正しいかどうかのチェックをするためには、日付設定前にsetLenientメソッドを使用する必要が有ります。setLenientメソッドの記述は以下の通りです。

    このとき引数には「false」を設定してください。

    次のコードは実際にsetLenientメソッドを使用した記述方法です。

    実行結果

    このコードではsdf.parseで「2019/13/40」と実際にはあり得ない日付を設定したため、実行結果としてfalseを吐き出しています。

    setLenientメソッドにfalseを指定しておくことで、このように日付の妥当性を検証することが出来ます。

    Calendarクラス

    Dateクラスと似たクラスとしてもう一つ覚えておいた方が良いクラスがあります。それがCalendarクラスです。

    Dateクラスの主な使用目的が値の取得であるのに対し、Calendarクラスの主な使用目的は日付や時刻の演算処理であり、値を計算する場合に使用します。したがってこの二つのクラスは似て非なるもの(=Calendarクラスは値の取得が出来ないという事ではないので注意してください)と言えます。

    Calendarクラスを使うためには次のパッケージをインポートする必要が有ります。

    またCalendarクラスオブジェクトの記述ルールは次のようになっています。

    getInstanceメソッドは、オブジェクト生成の度に現在の日付に初期化された状態でオブジェクトを返します。

    基本的な使い方

    それではまずCalendarクラスの基本的な使い方から見てみましょう。
    次のコードを見てください。

    このコードではCalendarクラスのgetメソッドを使用することで、それぞれのフォーマットに対応した値を取得しています。

    ここでは絶対に忘れてはいけない注意点が一つあります。DateクラスとCalendarクラスには「月またぎ問題」と呼ばれる問題があり、1月が「0」になります。

    したがって実際の月の計算には日付を出力させる前に以下の1行を付け加える必要が有ります。

    これを踏まえ、再度現在の年月日を表示させるコードを記述すると以下のようになります。

    日付を設定する

    日付や時間といった要素を指定した値に設定したい場合にはCalendarクラスのsetメソッドを使用します。

    CalendarクラスではYEAR、MONTH、DATE、HOUR、MINUTEなどの定数が予め用意されています。

    setメソッドの第一フィールドにはこれらの定数を、第二フィールドには値を指定することが出来ます。

    次のコードではsetメソッドの基本的な使用方法を紹介します。

    実行結果

    このコードではsetメソッドの第一フィールドにCalendarクラスの定数であるYEARを指定、第二フィールドには2019という値を指定していますが、第二フィールドに過去の日付も指定することも可能です。

    加算/減算などの演算処理

    Calendarクラスオブジェクトが保持している日付に対し、指定した値で演算処理をしたい場合にはaddメソッドを使用します。

    記述ルールは次の通りです。

    setメソッドと同じく、第一フィールドには定数を、第二フィールドには値を入れることが出来ます。
    では実際のコードを見てみましょう。

    実行結果

    まとめ

    今回はDateクラスとCalendarクラスについて説明してみました。

    プログラミングをしていると日付を扱う機会が非常に多いことに気づくはずです。プログラミングの中でも基本部分ではありますが、それだけに色々な方法が確立されており構築方法も様々ですので、これを機にしっかりと学習しておきましょう。


    ポテパンが提供するサービスについて

    本メディア「ポテパンスタイル」を運営する株式会社ポテパンは、エンジニアキャリア領域で複数サービスを提供しています。

    ポテパンフリーランス

    ポテパンフリーランス

    フリーランスエンジニアの方に高単価案件をご紹介しております。弊社ではフリーランス案件を常時300件ほど保有しており、その中からあなたに適した案件をご案内いたします。また、これから独立してフリーランスになる方の無料個別相談も承っております。フリーランスになった後の案件獲得方法やお金面(税金や保険など)についてお答えいたします!フリーエンジニアになりたい方向けのコンテンツも盛りだくさんです。

    ポテパンキャリア

    ポテパンキャリア

    エンジニア職専門の転職エージェントです。ポテパンキャリアでは、技術のわかるエージェントがあなたの転職をサポートします。エージェント自身がエンジニアなので、あなたと同じ目線で仕事内容や今後のキャリアについて一緒に考えることができます。年収800万円以上のハイスペック転職をご希望の方は「ポテパンプロフェッショナル」もご用意しておりますのでご利用下さいませ。

    ポテパンキャンプ

    ポテパンキャンプ

    ポテパンキャンプでは、RubyにてゼロからオリジナルのECサイトを作り上げてる3ヶ月間の実践型カリキュラムを提供しております。すでに本スクールの卒業生は、エンジニア職として様々な企業様に就職しております。なお、本スクールは受講料25万円と他社スクールに比べ格安となっており、またポテパンからご紹介させていただいた企業へ就職が決まった場合は、全額キャッシュバックいたします。



    株式会社ポテパンは、企業とエンジニアの最適なマッチングを追求しています。気になるサービスがあれば、ぜひ覗いてみてください!

    ポテクラバナー ポテプロバナー

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE