概要

TimeZoneなどを使って、日付の表示を変換します。

サンプルコード

SimpleDateFormat format = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.US);
DateFormat df = DateFormat.getDateTimeInstance();
// df.setTimeZone(TimeZone.getTimeZone("Asia/Tokyo"));
df.setTimeZone(TimeZone.getDefault());

JButton formatButton = new JButton("format");
formatButton.addActionListener(e -> field.setText(format.format(new Date())));

JButton parseButton = new JButton("parse");
parseButton.addActionListener(e -> {
  String str = field.getText().trim();
  Date date = format.parse(str, new ParsePosition(0));
  String o = Optional.ofNullable(date).map(df::format).orElse("error");
  textArea.append(o + "\n");
});
view all

解説

上記のサンプルは、Locale.USの日付文字列をSimpleDateFormat#parse(...)メソッドを使用して一旦Dateに変換し、DateFormat#format(...)メソッドでデフォルトロケールTimeZoneのフォーマットスタイルに変換しています。

  • メモ:
    • dateFormat.setTimeZone(TimeZone.getTimeZone("JST"))のような3文字のタイムゾーンIDの使用は非推奨
    • Java 1.7.0から、タイムゾーンのパターン文字としてXを使用すると、ISO 8601形式に変換可能になった
      • X: +09
      • XX: +0900
      • XXX: +09:00
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
        System.out.println("pubdate: " + format.format(new Date()));
        // pubdate: 2014-09-08T00:05:45+09:00
        

参考リンク

コメント