DateからStringにしたものを戻す方法
System.out.println(new Date())
上記のように一度デフォルトで出力してしまったものをDate形式に戻したいとなったことはないでしょうか?
今回はDateクラスのtoStringメソッドで変換されたものを、SimpleDateFormatで戻す方法を解説します。
SimpleDateFormatの解説はこちらを参照してください。
toStringメソッド
JavaではDateクラスのtoStringメソッドで文字列に変換されます。
形式は以下のようになっています。
Date オブジェクトを次の形式の String に変換します。
dow mon dd hh:mm:ss zzz yyyy
説明
- dow は曜日 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)
- mon は月 (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec)
- dd は 2 桁の 10 進数である月の日 (01 〜 31)
- hh は 2 桁の 10 進数である日の時 (00 〜 23)
- mm は 2 桁の 10 進数である時の分 (00 〜 59)
- ss は 2 桁の 10 進数である分の秒 (00 〜 61)
- zzz はタイムゾーン (夏時間を反映する場合がある)。標準タイムゾーンの省略名には、parse メソッドで認識されるものも含まれる。タイムゾーンの情報がない場合、zzz は空で、文字は含まれない
- yyyy は 4 桁の 10 進数である年
toStringで変換された文字列の逆変換
普通に考えればSimpleDateFormatでparseするだけのように思います。
12345 String dateStr = "Sun Mar 18 10:00:00 JST 2018";SimpleDateFormat sdf = new SimpleDateFormat("dow mon dd hh:mm:ss zzz yyyy");Date date = sdf.parse(dateStr);しかし、このようにするとParseExceptionが出てしまい変換することができませんでした。
調べてみたところ、dow mon zzzの部分に数字ではなく、英語が含まれているため、どの言語か判断できずにexceptionが発生してしまうようです。
そこでnewする際の引数にlocaleを追加してやればいいようです。
12345 String dateStr = "Sun Mar 18 10:00:00 JST 2018";SimpleDateFormat sdf = new SimpleDateFormat("dow mon dd hh:mm:ss zzz yyyy", Locale.ENGLISH);Date date = sdf.parse(dateStr);
環境によるのかもしれませんが、上記のフォーマット指定では上手くいかず、
下記のようにしたら上手くいきました。
SimpleDateFormat sdf = new SimpleDateFormat(“EEE MMM dd hh:mm:ss Z yyyy”, Locale.ENGLISH);
ご参考まで。