【Java入門】日付のフォーマットを変更できるSimpleDateFormatクラス

  • このエントリーをはてなブックマークに追加
  • Pocket

SimpleDateFormatクラスはJavaで日付のフォーマットを変更したり、文字列を日付オブジェクトに変えたりするために利用されるクラスだ。

このページではサンプルコードも含めてSimpleDateFormatについて解説した。日付の書式を変更したいときに利用いただければと思う。

JavaのSimpleDateFormatクラス

SimpleDateFormatクラスは、日付オブジェクトの書式を設定した文字列に変換して表示したり、文字列を日付オブジェクトに変換したりするjava.textパッケージにあるクラスだ。

同じくjava.textパッケージにあるDateFormatクラスを継承している。そのためDateFormatクラスのメソッドも使用できるのでAPIを調べるときは気を付けよう。

まずはJavaでの日付フォーマットのルールを確認しよう。

Javaでの日付フォーマット

日付フォーマットのルールは次の通りだ。

文字

意味

yy

西暦年(2桁)

2016年 → 16

yyyy

西暦年(4桁)

2016年 → 2016

M

9月 → 9

MM

月(ゼロ埋め)

9月 → 09

D

年に対する日

9月5日 → 249

DDD

年に対する日(ゼロ埋め)

1月1日 → 001

d

月に対する日

9月5日 → 5

dd

月に対する日(ゼロ埋め)

9月5日 → 05

w

年に対する週

2016年9月5日 → 37

W

月に対する週

2016年9月5日 → 2

E

曜日

2016年9月5日 → 月

F

月に対する曜日番号

2016年9月5日 → 1

a

午前午後

17時56分 → 午後

h

時(12時間制)

17時 → 5

hh

時(12時間制 ゼロ埋め)

17時 → 05

H

時(24時間制)

17時 → 17

HH

時(24時間制 ゼロ埋め)

6時 → 06

m

9分 → 6

mm

分(ゼロ埋め)

9分 → 09

s

6秒 → 6秒

ss

秒(ゼロ埋め)

3秒 → 03秒

S

ミリ秒

99ミリ秒 → 99

SSS

ミリ秒(ゼロ埋め)

99ミリ秒 → 093

ここからは細かい説明に入っていくが、とりあえずの使い方を知りたいという方はサンプルコードまで飛んでいただければと思う。下の方に用意しているので、そこまでカーソルを。

コンストラクタ

コンストラクタは次のようになっている。

SimpleDateFormat()

引数

なし

内容

 デフォルトパターン(yy/MM/dd H:mm)と日付フォーマット記号を使って SimpleDateFormat を生成する。

SimpleDateFormat(String pattern)

引数

pattern 日付・時刻の書式(パターン)

内容

引数で渡されたパターンとデフォルトの日付フォーマット記号を使って SimpleDateFormat を生成する。

SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols)

引数

pattern          日付・時刻の書式(パターン)

formatSymbols   日付フォーマット記号

内容

 引数で渡されたパターンと日付フォーマット記号を使って SimpleDateFormat を生成する。

主なメソッド

続いてメソッドだ。SimpleDateFormatでは次のような各種メソッドが用意されている。

文字列を日付フォーマットにする

SimpleDateFormatオブジェクト. applyPattern  (String pattern)

戻り値の型

void

内容

指定されたパターン文字列を、この日付フォーマットに適用する。

引数:

pattern - この日付フォーマットのための新しい日付と時刻のパターン

例外:

・指定されたパターンが null の場合NullPointerExceptionが発生する。

- 指定されたパターンが正しくない場合IllegalArgumentException が発生する。

指定されたDateを日付文字列にフォーマットする

SimpleDateFormatオブジェクト.format(Date date)

戻り値の型

Public StringBuffer

内容

指定された Date を日付/時刻文字列にフォーマットし、指定された StringBuffer に結果を追加する。

引数:

date - 日付/時刻文字列にフォーマットする日付/時刻値

戻り値:

フォーマットされた日付/時刻文字列

例外:

指定された日付が null の場合、実行時にNullPointerExceptionが発生する。

文字列から解析してDateオブジェクトを生成する

SimpleDateFormatオブジェクト.parse(String text)

戻り値の型

Public Date

内容

文字列からテキストを解析して Date オブジェクトを生成する。

引数:

text - 部分的に解析される String

戻り値:

文字列から解析される Dateオブジェクト。エラーの場合は null を返す

例外:

 text が null の場合NullPointerException が発生する。

上と同じだが、エラー時の処理が違う

SimpleDateFormatオブジェクト.parse(String text, FieldPosition pos)

戻り値の型

Public Date

内容

文字列からテキストを解析して Date オブジェクトを生成する。

エラーが発生した場合、posへエラーインデックスが設定されDateオブジェクトにはnullが設定される。

引数:

text - 部分的に解析される String

pos - 上記のインデックスおよびエラーインデックス情報を持つ ParsePosition オブジェクト

戻り値:

文字列から解析される Dateオブジェクト。エラーの場合は null を返す

例外:

 text または pos が null の場合NullPointerException が発生する。

日付フォーマットを記述するパターン文字列を返す

SimpleDateFormatオブジェクト.toParttern()

戻り値の型

Public String

内容

この日付フォーマットを記述するパターン文字列を返します。

戻り値:

この日付フォーマットを記述するパターン文字列

SimpleDateFormatクラスのサンプルコード

それでは実際のサンプルコードを確認していこう。

日付オブジェクトから文字列へ変換するサンプルコード

実行結果

サンプルコードの説明

  • [1] Dateオブジェクトtodayを生成し、実行時の日時情報を取得。書式は表示せずに表示。
  • [2] SimpleDateFormatオブジェクトformat1を引数なしで生成。toPatternメソッドを使って初期値として設定されている書式パターンを表示。
  • [3] todayを、formatメソッドを使用してのformat1の書式の文字列に変換して表示。
  • [4] SimpleDateFormatオブジェクトformat2を「yyyy年MM月dd日 E曜日 H時mm分」の書式パターンで生成。todayをformatメソッドを使ってformat2の指定書式の文字列に変換して表示。

文字列を日付オブジェクトへ変換するサンプルコード

続いては、文字列を日付オブジェクトへ変換するコードだ。

実行結果

サンプルコードの説明

  • [1]パターンyyyy/MM/ddを設定したSimpleDateFormatオブジェクトfmtを生成。”2016/09/05”を代入した変数strDateをparseメソッドを使用してDateオブジェクトdateへ変換。
  • [2] dateを表示。
  • [3] 文字列を日付型に変換する際の解析位置を保持するParsePositionオブジェクトの変数posのエラー位置を表示。エラーがなかった場合は「-1」が表示される。
  • [4] 日付としては不正な文字列”2016//09/05”を代入した変数strDate1を、paseメソッドを使用してDateオブジェクトへ変換。
  • [5] エラーが発生することなく処理は実行されるが、生成されたDateオブジェクトを表示するとnullとなる。
  • [6] 解析エラー発生位置「5」が表示される。[7] parseメソッドで変換する際に、ParsePositionオブジェクトは渡さず文字列だけ渡して文字列からDateオブジェクトへの変換処理を実行すると、実行時にエラー発生。

まとめ

このページでは、Javaで日付のフォーマットを変更できるSimpleDateFormatクラスについてまとめてきた。

日付のフォーマットを思うように決めたいときは、プログラミングをしていてよくあることだ。SimpleDateFormatは活用できるようにしておこう。

  • このエントリーをはてなブックマークに追加
  • Pocket

このページの続きや関連ページは下記から一覧で確認できる。

短期間でエンジニアになる方法

・「まったくの初心者だけどエンジニアになりたい!」

・「プログラマーとして転職をしたい!」

という方はリナックスアカデミーの資料を見てみてください。短期間で未経験からエンジニアになることができるスクールとして15年間選ばれ続けてきた理由やノウハウが載った資料です。

エンジニアの入り口に立つために必要な勉強技術の最新動向本当に使えるIT資格学習に役立つ国からの奨励金などの情報が詰まっています。

無料で2,3日中にお手元にお届けします。


資料を見てみる

SNSでもご購読できます。

コメント

  1. 匿名希望 より:

    日付フォーマットのルールは次の通りだ。
    hh時(24時間制)???

    hh時は(12時間制 ゼロ埋め)では?

    1. リナックスアカデミー より:

      おっしゃる通りですね。ご指摘ありがとうございます。修正いたします。

コメントを残す

*