技術メモブログ

技術ネタの備忘録的なブログ。技術ネタ以外にも気になったことをつらつら書きます

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 も記載されてて好み

間違いとかあれば、後で追記・修正します。