日付のフォーマット
スレッドセーフで不変なDateTimeFormatterで日付をフォーマットする。
コード比較
✕ Pre-Java 8
// Not thread-safe!
SimpleDateFormat sdf =
new SimpleDateFormat("yyyy-MM-dd");
String formatted = sdf.format(date);
// Must synchronize for concurrent use
✓ Java 8+
DateTimeFormatter fmt =
DateTimeFormatter.ofPattern(
"uuuu-MM-dd");
String formatted =
LocalDate.now().format(fmt);
// Thread-safe, immutable
このコードに問題がありますか? お知らせください。
モダンな方法が優れている理由
スレッドセーフ
同期なしでスレッド間でフォーマッターを共有できます。
組み込みフォーマット
標準書式にはISO_LOCAL_DATE、ISO_INSTANTなどが使えます。
不変性
static finalの定数として安全に保存できます。
旧来のアプローチ
SimpleDateFormat
モダンなアプローチ
DateTimeFormatter
JDKバージョン
8
難易度
初級
JDKサポート
日付のフォーマット
利用可能
JDK 8(2014年3月)以降、広く利用可能
仕組み
DateTimeFormatterはSimpleDateFormatと異なり、不変でスレッドセーフです。定数として保存して共有できます。ISO_LOCAL_DATEなどの定義済みフォーマッターも一般的な書式に利用できます。
関連ドキュメント