ITエンジニアのプレイングマネージャー化応援サイト

16.日付/時刻と列挙型

この記事では、弊社の新人エンジニア研修の参考にJava8を解説します。

前回はコレクションとジェネリクスについて解説しました。

今回は日付/時刻と列挙型について解説します。

 

Javaには過去の経緯から日付/時刻するクラスはたくさんあります。

しかし、当社の新人研修ではjava.timeパッケージの中のクラスに限定してお伝えします。

詳しい使い方は必要に応じて調べてください。

 

1.現在日時の取得

今現在を表すインスタンスはLocalDateTimeクラスのnowメソッドで取得できます。

<結果の例>

2021-02-10T13:37:43.995

結果は「西暦-月-日T時:分:秒」の形で表示されました。

インスタンスから年だけ、月だけ、日だけ、、、のように一部の要素を取り出すには以下のようにgetで始まるメソッドを使用します。

<結果の例>

2021年
FEBRUARY月
10日
WEDNESDAY曜日
13時
51分
55秒
41000000ナノ秒

ところでここで出てきた「FEBRUARY」、「WEDNESDAY」といった文字列は何でしょうか?

実はこれらは列挙型と呼ばれるJavaの型の一つです。

列挙型は複数の定数をひとつにまとめておくことができる型です。

月はJANUARYから始まって12個しかありません。

曜日はMONDAYから始まって7個しかありません。

このように限定的なものは列挙型にすると色々と便利なのです。

列挙型についてはこの後学んでいきます。

 

2.特定の日付の扱い

特定の日付のインスタンスを作成するにはLocalDateクラスのクラスメソッドofを使います。

以下は1995年4月19日の人の誕生日を表示しています。

<結果>

1995-04-19

なお、ありえない日付を指定すると例外が発生します。

<結果>

java.time.DateTimeException: Invalid date ‘APRIL 31’
null

4月31日というのはありえないため例外が発生しました。

 

3.日付の書式を指定する

クラスDateTimeFormatterを使います。

先にサンプルコードを見てみます。

クラスDateTimeFormatterのofPatternメソッドは引数として書式とロケールという同じ言語を共有する区域を指定します。

上記の例で書式は、uuuuが西暦を、Mが月を、dが日付を、Eが曜日をそれぞれ意味しています。

例えば、月を2桁で表示したければMM、日付を2桁で表示したければddとします。

試してみてください。

ロケールはLocale.JAPANESEとなっています。

DateTimeFormatterのofPatternメソッドの戻り値に対してメソッドチェーンでformatメソッドを呼んで、

引数にクラスLocalDateのインスタンスを渡せば、上記のような結果になります。

 

なお、和暦の表示も可能です。

以下のサンプルコードを御覧ください。

<結果>

令和 3年2月10日(水)

 

4.時刻の扱い

時刻を表すクラスは、クラスLocalTimeです。

クラスLocalTimeのofメソッドの引数に時間(0~23)と分(0~59)をカンマで区切って指定します。

以下のサンプルコードを御覧ください。

<結果>

00:00
23:59

なお、上記の例では分までしか指定していませんが、秒、ナノ秒まで指定が可能です。

第3、第4引数を使います。

 

時刻の比較も可能です。

クラスLocalTimeのインスタンスメソッドisBeforeやisAfterを使います。

次のサンプルコードをご覧ください。

<結果>

true
false

このようにたくさんのクラス、メソッドがあります。

とても全ては紹介しきれないので、必要に応じて調べて使ってください。

 

4.Enum(列挙型)とは

ここではクラスEnum(イーナム)について簡単な説明をします。

さきほどパッケージ java.timeで月や曜日でEnumが使われている例を見ました。

定数を集めて一つにしたのがEnumです。

Enumは限定されたものを列挙するのに使うと便利です。

みなさんもオリジナルのEnumを作成して利用することができます。

Enum型の宣言には、クラスのかわりにenumキーワード(先頭小文字)を使います。

以下のサンプルコードを見てください。

イメージとしては、コーヒーショップでカップのサイズが4つあるというところです。

定数なのですべて大文字で表記します。また、要素名はカンマで区切って記述します。

Enumは特別なメソッドをいくつか持っています。

例えば、valuesメソッドを使って要素名を取得することができます。

拡張for文と組み合わせて次のようなコードを書くことができます。

<結果>

SHORT
TALL
GRANDE
VENTI

このようにvaluesメソッドを使えば全要素が配列として取得できるので、拡張For文の条件指定に使えます。

以下のようにCompareToメソッドで大小比較も可能です。

※CompareToメソッドの戻り値の詳細についてはComparableインターフェースについて書かれた記事を参考にしてください。

<結果>

1
0
-1

(以下記述予定)

また、switch文の中でケースラベルに指定することができます。

 

オリジナルのフィールドやメソッドを持たせることも可能です

内部クラスにしてもいいです。

 

 

 

【今回の復習Youtube】

059-APIの利用-現在の日付を求める

060-APIの利用-当月の初日の日付を求める

061-APIの利用-当月の末日の日付を求める

062-APIの利用-任意の日付を指定する

063-APIの利用-日付の書式を指定する

064-APIの利用-任意の時刻を指定する

065-APIの利用-時刻を比較する

052-enum型-enum型のサンプル

 

JavaSE8の解説に戻る

新入社員研修ポータル

ZOOMを使った遠隔研修メニュー(PDFが開きます)

ZOOMを使った遠隔研修

新人エンジニアのためのJavaタイピングゲーム

新人プログラマのためのプログラミング動画

YouTubeチャンネル

新入社員研修ポータル

PAGETOP
Copyright © Say Consulting Group, Inc. All Rights Reserved.