ISO 8601は国際標準化機構(ISO)によって定められた日時の表記方法であり、国際的なデータ交換において広く利用されています。JavaでISO 8601形式の日時を扱う際、java.timeパッケージは強力なツールセットを提供します。この記事では、任意の形式のISO日時文字列を特定の形式(2021-11-11T13:23:45,123456+09:00)に変換する方法を紹介します。
日時のパース: 最初のステップは、入力されたISO日時文字列をLocalDateTime、ZonedDateTime、またはOffsetDateTimeオブジェクトにパースすることです。入力形式が事前にわかっていない場合は、DateTimeFormatterを使って柔軟に対応することが可能です。
2. 日時の変換: 日時オブジェクトを目的の形式に変換します。このプロセスでは、DateTimeFormatterをカスタマイズして使用します。
3. 結果の出力: 最終的に、変換された日時を文字列として出力します。
Javaコード
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
public class IsoDateTimeFormatter {
public static void main(String[] args) {
String inputIsoDateTime = "2021-11-11T13:23:45.123456+09:00"; // 例としてこの入力を使用
String outputIsoDateTime = formatIsoDateTime(inputIsoDateTime);
System.out.println(outputIsoDateTime);
}
public static String formatIsoDateTime(String inputIsoDateTime) {
try {
// 入力された日時を解析
ZonedDateTime dateTime = ZonedDateTime.parse(inputIsoDateTime);
// 目的のフォーマットを定義
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss,SSSSSSXXX");
// 日時を変換して文字列として返す
return dateTime.format(formatter);
} catch (DateTimeParseException e) {
// 日時の解析に失敗した場合は、エラーメッセージを返す
return "Invalid ISO DateTime format.";
}
}
}
このコード例では、ZonedDateTime.parseメソッドを使用してISO日時文字列を解析し、カスタマイズされたDateTimeFormatterを使用して目的の形式に変換しています。この例では、ナノ秒までの精度を含む特定の形式を指定していますが、DateTimeFormatterのパターンを調整することで、異なる形式にも対応可能です。