LocalDateTime ↔ String 変換ツール
Java の LocalDateTime と String を相互変換。フォーマットパターン対応・変換履歴付き。
入力欄に日時を入力し、出力フォーマットを選択または直接入力してください。
文字列と対応するフォーマットパターンを入力して、LocalDateTime のフィールドに変換します。
最近の変換履歴(最大5件)
- まだ変換履歴はありません。
クイック変換サンプル
よく使うフォーマットのクリックで即変換。クリックすると変換ツールにセットされます。
DateTimeFormatter パターン文字一覧
| 文字 | 意味 | 例(値) | 出力例 |
|---|---|---|---|
| y | 年 | 2025年 | 2025 / 25(yy) |
| M | 月(数値/テキスト) | 9月 | 9(M)/ 09(MM)/ Sep(MMM) |
| d | 日(月内) | 5日 | 5(d)/ 05(dd) |
| H | 時(0〜23、24時間制) | 14時 | 14 |
| h | 時(1〜12、12時間制) | 午後2時 | 2 |
| m | 分 | 30分 | 30 |
| s | 秒 | 45秒 | 45 |
| S | ミリ秒(秒の小数部) | 123ミリ秒 | 1(S)/ 12(SS)/ 123(SSS) |
| n | ナノ秒 | 123456789 | 123456789 |
| E | 曜日名 | 火曜日 | Tue(EEE)/ Tuesday(EEEE) |
| a | 午前/午後 | PM | AM / PM |
| D | 年内通算日 | 1月15日 | 15 |
| G | 紀元(元号) | 西暦 | AD |
| z | タイムゾーン名 | JST | JST(ZonedDateTimeのみ) |
| Z | タイムゾーンオフセット | +0900 | +0900 |
| X | オフセット(UTC=Z) | +0900/UTC | +09:00(XX)/ Z(UTC時) |
| ‘text’ | リテラル文字(エスケープ) | T など | yyyy-MM-dd’T’HH:mm:ss |
主要フォーマット対照表
| フォーマット名 | パターン | 出力例 | 主な用途 |
|---|---|---|---|
| ISO 8601(基本) | yyyy-MM-dd’T’HH:mm:ss | 2025-09-23T12:30:45 | API、国際標準 |
| ISO 8601(ミリ秒) | yyyy-MM-dd’T’HH:mm:ss.SSS | 2025-09-23T12:30:45.123 | ログ、精度が必要な場合 |
| 標準日時 | yyyy-MM-dd HH:mm:ss | 2025-09-23 12:30:45 | データベース(MySQL等) |
| スラッシュ区切り | yyyy/MM/dd HH:mm:ss | 2025/09/23 12:30:45 | 日本のWebシステム |
| 日本語形式 | yyyy年MM月dd日 HH時mm分ss秒 | 2025年09月23日 12時30分45秒 | UI表示、帳票 |
| コンパクト | yyyyMMddHHmmss | 20250923123045 | ファイル名、ログID |
| ミリ秒タイムスタンプ | yyyyMMddHHmmssSSS | 20250923123045123 | 一意キー生成 |
| 日付のみ | yyyy-MM-dd | 2025-09-23 | 日付フィールド |
| 時刻のみ | HH:mm:ss | 12:30:45 | 時刻表示 |
変換手順とJavaコード例
LocalDateTime → String の変換手順
- LocalDateTimeオブジェクトを取得
LocalDateTime.now()またはLocalDateTime.of(年, 月, 日, 時, 分, 秒)で生成します。 - DateTimeFormatterを作成
DateTimeFormatter.ofPattern("パターン文字列")で変換フォーマットを指定します。 - format()メソッドで変換
dateTime.format(formatter)を呼び出すと文字列が返ります。
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
// LocalDateTime → String
LocalDateTime dateTime = LocalDateTime.of(2025, 9, 23, 12, 30, 45);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm:ss”);
String result = dateTime.format(formatter);
// 結果: “2025-09-23 12:30:45”
String → LocalDateTime の変換手順
- 変換対象の文字列を用意
文字列のフォーマットを事前に確認します。フォーマットが不明な場合は自動検出(ISO 8601)を試みます。 - DateTimeFormatterを文字列に合わせて作成
文字列のフォーマットと一致するパターンをDateTimeFormatter.ofPattern()で作成します。 - parse()メソッドで変換
LocalDateTime.parse(文字列, formatter)を呼び出します。形式が合わない場合はDateTimeParseExceptionがスローされます。 - 例外処理を実装
try-catchブロックでDateTimeParseExceptionを捕捉し、エラーメッセージを表示します。
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
// String → LocalDateTime
String input = “2025/09/23 12:30:45”;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(“yyyy/MM/dd HH:mm:ss”);
try {
LocalDateTime dateTime = LocalDateTime.parse(input, formatter);
System.out.println(dateTime); // 2025-09-23T12:30:45
} catch (DateTimeParseException e) {
System.err.println(“解析エラー: “ + e.getMessage());
}
ISO 8601形式(Tあり)の自動解析
// ISO 8601形式はフォーマット指定なしでparseが可能
String isoString = “2025-09-23T12:30:45”;
LocalDateTime dateTime = LocalDateTime.parse(isoString);
// 結果: 2025-09-23T12:30:45
定義済みフォーマッター定数一覧
| 定数名 | パターン例 | 対応クラス |
|---|---|---|
| ISO_LOCAL_DATE_TIME | 2025-09-23T12:30:45 | LocalDateTime |
| ISO_LOCAL_DATE | 2025-09-23 | LocalDate |
| ISO_LOCAL_TIME | 12:30:45 | LocalTime |
| ISO_DATE_TIME | 2025-09-23T12:30:45+09:00[Asia/Tokyo] | ZonedDateTime |
| ISO_OFFSET_DATE_TIME | 2025-09-23T12:30:45+09:00 | OffsetDateTime |
| ISO_INSTANT | 2025-09-23T03:30:45Z | Instant |
| BASIC_ISO_DATE | 20250923 | LocalDate |
| ISO_WEEK_DATE | 2025-W39-2 | LocalDate |
| RFC_1123_DATE_TIME | Tue, 23 Sep 2025 12:30:45 GMT | ZonedDateTime |
Java 日時クラスの変換フロー
| 変換元 | 変換先 | 主なメソッド | 備考 |
|---|---|---|---|
| LocalDateTime | String | dateTime.format(formatter) | DateTimeFormatterが必要 |
| String | LocalDateTime | LocalDateTime.parse(str, formatter) | ISO形式はformatter省略可 |
| LocalDateTime | ZonedDateTime | dateTime.atZone(ZoneId.of(“Asia/Tokyo”)) | タイムゾーン付与 |
| ZonedDateTime | LocalDateTime | zonedDateTime.toLocalDateTime() | ゾーン情報が失われる |
| LocalDateTime | LocalDate | dateTime.toLocalDate() | 時刻部分が失われる |
| LocalDate | LocalDateTime | localDate.atTime(12, 0) / atStartOfDay() | 時刻を指定する必要あり |
| LocalDateTime | Instant | dateTime.toInstant(ZoneOffset.of(“+09:00”)) | オフセット指定が必要 |
| Date(旧API) | LocalDateTime | date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime() | Instantを経由 |
| LocalDateTime | Date(旧API) | Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant()) | Instantを経由 |
| Timestamp(SQL) | LocalDateTime | timestamp.toLocalDateTime() | Java 8以降直接変換可 |
| LocalDateTime | Timestamp(SQL) | Timestamp.valueOf(localDateTime) | Java 8以降直接変換可 |
よくある質問(FAQ)
最も多い原因は、入力文字列のフォーマットと
DateTimeFormatter のパターンが一致していないことです。たとえば文字列が 2025/09/23 12:30:45 なのに、フォーマッターが yyyy-MM-dd HH:mm:ss(ハイフン区切り)の場合にエラーになります。また、月・日・時・分・秒の桁数が合っていない場合も原因になります(例:M と MM の違い)。まずは入力文字列のフォーマットを確認し、それに合わせたパターンを指定してください。
LocalDateTime はタイムゾーン情報を持たない「ローカル日時」です。例えば 2025-09-23T12:30:45 はどの地域の時刻かが不明です。一方 ZonedDateTime はタイムゾーン(例: Asia/Tokyo)を含む絶対時刻を表します。国際化対応が必要なシステムや、異なるタイムゾーン間での時刻変換には ZonedDateTime または OffsetDateTime を使用してください。
SimpleDateFormat は Java 1.1 から存在する旧来のクラスで、スレッドアンセーフであるため共有インスタンスとして使うと問題が発生することがあります。Java 8 以降は DateTimeFormatter(java.time.formatパッケージ)の使用が推奨されています。DateTimeFormatter はイミュータブル(不変)でスレッドセーフ、かつロケール対応も優れています。
DateTimeFormatter.ofPattern("パターン", Locale.JAPANESE) のように第二引数にロケールを指定します。例えば曜日を日本語で表示する場合は EEEE パターンにロケール Locale.JAPANESE を指定すると「火曜日」のような出力が得られます。月名(MMMM)も同様に「9月」と表示されます。
DateTimeFormatter fmt = DateTimeFormatter.ofPattern(“yyyy年M月d日(EEEE)HH:mm”, java.util.Locale.JAPANESE);
LocalDateTime dt = LocalDateTime.of(2025, 9, 23, 12, 30);
System.out.println(dt.format(fmt)); // 2025年9月23日(火曜日)12:30
ナノ秒を含む文字列(例:
2025-09-23T12:30:45.123456789)をparseする場合は、DateTimeFormatter.ISO_LOCAL_DATE_TIME を使うか、パターンに n(ナノ秒)を含めます。ただし SSS はミリ秒(3桁)のみ対応で、6桁のマイクロ秒は SSSSSS、9桁のナノ秒は SSSSSSSSS または n を使います。ISO形式であれば LocalDateTime.parse(str)(フォーマッター省略)でも自動対応できます。
JSON(Jackson): Spring Boot 2.x 以降はデフォルトで
JPA/Hibernate: Java 8 以降の日時型は Hibernate 5.2+ で標準サポートされています。カラム型は
LocalDateTime を配列形式でシリアライズします。ISO 8601文字列にするには application.properties に spring.jackson.serialization.write-dates-as-timestamps=false を追加するか、@JsonSerialize / @JsonDeserialize アノテーションを使います。JPA/Hibernate: Java 8 以降の日時型は Hibernate 5.2+ で標準サポートされています。カラム型は
@Column と組み合わせて自動マッピングされます。タイムゾーンを保存したい場合は ZonedDateTime の使用を検討してください。
LocalDateTime には比較用メソッドが用意されています。isBefore(other)(指定日時より前か)、isAfter(other)(指定日時より後か)、isEqual(other)(同じ日時か)、compareTo(other)(整数値で大小比較)が使えます。equals() は isEqual() と同等です。タイムゾーンが異なる日時を比較する場合は、ZonedDateTime に変換してから比較してください。
