今回は、SimpleDateFormat で String 型の日付をフォーマットしようとしたときにエラーを吐いてしまい困ったことがあったので、その解決策について記載したいと思います。
具体的なコードは以下の通り。
「yyyyMMddhhmmss」形式の文字列を「yyyy/MM/dd hh:mm:ss」にフォーマットしようとした結果、エラーを吐いてしまいました。
// フォーマットパターン指定
SimpleDateFormat slashSdf = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
// 変換対象の日付文字列
String strDate = "20230101000000";
// フォーマット
slashSdf.format(strDate);
動作結果は、
Cannot format given Object as a Date
となってしまいフォーマットに失敗してしまいました。
String 型の日付文字列を Date 型に一度変換してからフォーマットを行うことで、解決することができます。
今回の場合はこのようになります。
// 型変換用
SimpleDateFormat nothingSdf = new SimpleDateFormat("yyyyMMddhhmmss");
// フォーマット変換用
SimpleDateFormat slashSdf = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
// 変換対象の日付文字列
String strDate = "20230101000000";
// 文字列型から日付型に変換
Date nothingDate = nothingSdf.parse(strDate);
// 変換した日付型のフォーマットを変換
String slashDate = slashSdf.format(nothingDate);
※パターンの異なる SimpleDateFormat で Date 型に変換してしまうと、下記のように ParseException が発生してしまうので、型変換用の SimpleDateFormat を宣言してあげる必要があります。
java.text.ParseException: Unparseable date: "20230101000000"
このように、一度文字列型を日付型に変換してからフォーマットを行うことで、エラーを吐かずに変換することができます。
String 型の日付文字列がフォーマットできない理由はわかりませんが、開発を進める際に少し気になったので今回は記事にしてみました。もし同じような方がいれば、参考にしていただければと思います!