Date → 文字列への変換
仕事で Date → 文字列日付 の変換処理で考えたことがあったのでメモ
処理には以下の種類に分けてみた
※Joda についてはググれば情報でてくるのでそっち任せ
JDK
Date date = new Date(); SimpleDateFormat format = new SimpleDateFormat( "yyyy/MM/dd HH:mm:ss" ); format.format( date ); format = new SimpleDateFormat( "yyyy/MM/dd" ); format.format( date );
結果は
2015/12/05 15:26:53 2015/12/05
SimpleDateFormat の引数に、フォーマットを書いてやるのが面倒だし、手書きは良くない。
Apache
Date date = new Date(); SimpleDateFormat format = new SimpleDateFormat( DateFormatUtils.ISO_DATETIME_FORMAT.getPattern() ); format.format( date ); format = new SimpleDateFormat( DateFormatUtils.ISO_DATE_FORMAT.getPattern() ); format.format( date );
結果
2015-12-05T15:26:53 2015-12-05
Apache ライブラリでフォーマットが定義されているので、それを使えば手書きは無くなる
が、あまり種類は多くない
DateFormatUtils には以下のものが定義されている (これだけあれば、十分か)
変数 | フォーマット |
---|---|
ISO_DATETIME_FORMAT | yyyy-MM-dd'T'HH:mm:ss |
ISO_DATETIME_TIME_ZONE_FORMAT | yyyy-MM-dd'T'HH:mm:ssZZ |
ISO_DATE_FORMAT | yyyy-MM-dd |
ISO_DATE_TIME_ZONE_FORMAT | yyyy-MM-ddZZ |
ISO_TIME_FORMAT | 'T'HH:mm:ss |
ISO_TIME_TIME_ZONE_FORMAT | 'T'HH:mm:ssZZ |
ISO_TIME_NO_T_FORMAT | HH:mm:ss |
ISO_TIME_NO_T_TIME_ZONE_FORMAT | HH:mm:ssZZ |
SMTP_DATETIME_FORMAT | EEE, dd MMM yyyy HH:mm:ss Z", Locale.US |
Joda
DateTime time = new DateTime( new Date() ); // full; time.toString( DateTimeFormat.fullDate() ); time.toString( DateTimeFormat.fullDateTime() ); time.toString( DateTimeFormat.fullTime() ); // long; time.toString( DateTimeFormat.longDate() ); time.toString( DateTimeFormat.longDateTime() ); time.toString( DateTimeFormat.longTime() ); // medium; time.toString( DateTimeFormat.mediumDate() ); time.toString( DateTimeFormat.mediumDateTime() ); time.toString( DateTimeFormat.mediumTime() ); // short; time.toString( DateTimeFormat.shortDate() ); time.toString( DateTimeFormat.shortDateTime() ); time.toString( DateTimeFormat.shortTime() );
// ISODateTimeFormat を使用
time.toString( ISODateTimeFormat.date() );
やり方は2種類あるっぽい
前者の DateTimeFormat を使用と
後者の ISODateTimeFormat を使用するやりかた
ただし、出力の形式が若干異なり、スラッシュかハイフンの違い
これは場合に応じて使い分ければよいと思う
結果
# full 2015年12月5日 2015年12月5日 15時26分53秒 JST 15時26分53秒 JST # long 2015/12/05 2015/12/05 15:26:53 JST 15:26:53 JST # medium 2015/12/05 2015/12/05 15:26:53 15:26:53 # short 15/12/05 15/12/05 15:26 15:26
# ISODateTimeFormat 2015-12-05
ただし、DateTimeFormat の Javadoc を見ても説明が全然なくっていまいち
個人的には ISODateTimeFormat を使うほうが Javadoc も記載されてて好み
間違いとかあれば、後で追記・修正します。