MENU

java.textパッケージ

はじめに 

java.textパッケージには、日付や数値に代入された 

などの日付・時刻形式データを、任意の日付時刻フォーマットに変換するクラスが提供されています。 
簡単に言うと「このデータは、この形式で日時データとして解釈できますよ」と教えてあげるための書き方になります。 

Step1: SimpleDateFormat 

日時フォーマットの変換には SimpleDateFormat クラスを使用します。 
フォーマットパターンの指定により、 様々なフォーマットで日付・時刻を表示できるようになります。 
下記の表は、SimpleDateFormat クラスで用意されているパターン文字一覧です。 

上記のパターン文字を使用して、 日時を整形し表現します。 

特に、年月日と時間を表す 

の6パターンはよく使うので要チェックです。 

では、日時形式のデータをどのように日付・時刻データへ変換するのか実際に見ていきましょう。 
※intやStringに代入されているデータは、あくまでも「数値」と「文字列」です。 

「2018/01/01 23:59:00」 といった日付・時刻形式でデータが代入されていても、それは「日時の形をしているデータ」に過ぎないので、Javaは日時データとして認識してくれません。 
日時データとして認識させてあげるには、必ず「日時データ」へ変換する処理を書いてあげる必要があるのです。 

例) 

冒頭で登場したStringクラスの日時形式データ、 

を日時データに変換したい場合は、 

といったように、SimpleDateFormatの引数へ日時データに変換したいデータと同じパターンを記述し、 
Stringクラスの日時形式データを日時データへ変換する準備をします。 
※1:今回は「String dateTime = “2018/01/01 00:00:00″」 日時データに変換したいため、同一パターンの「yyyy/MM/dd HH:mm:ss」 を記述しています。 
※2:ここでパターンの記述を間違えると、parseExceptionエラー解析ができませんといった旨のエラー)が発生してしまうので気をつけましょう。 

次に、作成したSimpleDateFormat型の変数 「sdf」を使用して、日時データであることを表す Date型への変換を行います。

SimpleDateFormat.parseの引数へ、 Date型に変換したい値を渡すことで、引数に指定したデータのパターン 

と、SimpleDateFormatに記述したデータパターン 

が一致する場合、 Date型に変換後の値が代入されます。 

最後に、変換後の値が代入されたDate型変数 「date」 の中身を見てみましょう。 

【出力結果】 

Stringクラスの日時形式データが、 Date型の日時データに変換されました。 

【サンプルコード】 

以上が、日時型データを日時データに変換する処理の簡単な流れとなります。 

一例として、実際の作業手順としては、 
1.ユーザーが入力した日時をStringで受け取る 
2.受け取った値を SimpleDateFormat で解析してDate型に変換 
3. 変換したDate型変数から年だけを取り出し、取り出した年を用いて何らかの処理を記述する 

といった流れになります。 

【出力結果】 

上記の例は一例ですが、 SimpleDateFormatは 

  • 年や月といったデータを処理中で使用したい場合 
  • ライブラリを使用する際、 所定の形式へ変換する必要がある場合 

に使用するケースがほとんどです。 

SimpleDateFormatを使用して作成したデータの用途 「こうやって使うこともあるんだな」くらいに覚えておけば大丈夫ですが、 

記述する機会も多いため、今のうちにしっかりと把握しておきましょう。 

おまけ DateTimeFormatterについて 

SimpleDateFormat とよく似た機能として、DateTimeFormatter が存在します。 
日時パターンへ変換するという処理は SimpleDateFormat と同様ですが、いくつか異なる点もありますのでご紹介しましょう。 

SimpleDateFormatを使用する際は、 

といったように自インスタンスを生成しますが、 DateTimeFormatterの場合は 

の一行でパターンの指定が可能です。 newしない分消費メモリの節約ができます。 
その後 LocalDateTime を使用することで、上記で作成したフォーマットパターンを日時型データに反映させ、日時型データを日時データへ変換します。 

ちなみに、.parse内の第一引数は固定値でなくても大丈夫です。 

【出力結果】 

書き方は多少異なっていても、それぞれ日時形式のデータが出力されていることを確認できます。
処理の流れは SimpleDateFormat も DateTimeFormatter も大きな違いはありませんし、現場によって使用を推奨されるクラスが異なるケースもあります。 
(SimpleDateFormat は new でインスタンスを生成するため、性能要件を満たすには DateTimeFormatter を使うほうが望ましい……などなど) どちらを使うことになっても迷わないよう、「こういう書き方もあるんだな」と今のうちに覚えておいてしまいましょう。)

目次