JavaのLocalDateTime.formatメソッドを完全解説!初心者でもわかる日時フォーマット入門
生徒
「先生、Javaで日時を好きな形に表示したいんですがどうすればいいですか?」
先生
「それならjava.timeパッケージのLocalDateTimeクラスにあるformatメソッドを使うといいよ。フォーマッタを指定すれば自由に文字列に変換できるんだ。」
生徒
「例えば『2025年09月23日 10時30分』みたいに和暦風や好きな形式にできるんですか?」
先生
「もちろん!DateTimeFormatterを指定することでいろいろなパターンで表示できるよ。」
1. java.timeパッケージの役割
java.timeパッケージは、Java8から追加された「新しい日付・時刻の標準API」です。従来よく使われていたDateやCalendar、SimpleDateFormatと比べて、コードが読みやすく、間違いが起きにくいように設計されています。特に、マルチスレッド環境でも安全に使えることや、メソッド名が直感的で理解しやすいことが大きな特徴です。
そもそも「日付や時刻を扱う」とは、今日の日付を取得したり、「予約日」「締切日」「請求日」などの日時を変数として持ちまわることを意味します。業務システムやWebアプリでは、こうした日付と時刻の情報を表示したり、比較したり、一定期間を足し引きしたりする場面がとても多くあります。java.timeパッケージは、そのような場面で使うための基本的な部品を一式まとめたものだとイメージするとわかりやすいです。
代表的なクラスとして、日付だけを扱うLocalDate、時刻だけを扱うLocalTime、日付と時刻を一緒に扱うLocalDateTime、タイムゾーン付きで扱うZonedDateTimeなどがあります。これらはすべてjava.timeパッケージに含まれており、用途に応じて使い分けます。この後の解説では、特に画面表示やログ出力でよく使うLocalDateTimeを中心に見ていきます。
まずは、「現在の日時をオブジェクトとして取得する」というイメージをつかんでおきましょう。次のような、とてもシンプルなサンプルコードでもjava.timeの雰囲気がつかめます。
import java.time.LocalDateTime;
public class NowSample {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now(); // 現在の日時を取得
System.out.println(now); // そのまま表示
}
}
このサンプルを実行すると、例えば「2025-09-23T10:30:45」のように、現在の年月日と時刻が1つの値として出力されます。最初は少し見慣れない形かもしれませんが、「コンピュータが扱いやすい日時の表現」として覚えておくとよいでしょう。次の章では、このLocalDateTimeの値を、人間にも読みやすい形式に整えるために、フォーマット(整形)する方法を詳しく見ていきます。
2. LocalDateTimeクラスの特徴
LocalDateTimeは日付と時刻を保持するクラスで、タイムゾーンを含まないのが特徴です。例えば「2025年9月23日10時30分」をそのままオブジェクトとして表現できます。予約アプリやスケジュール管理など幅広いシステムで利用されています。
3. formatメソッドとは
formatメソッドはLocalDateTimeの日時を文字列に変換するためのメソッドです。指定したDateTimeFormatterに従って整形されるため、自由自在にフォーマットを設定できます。
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class FormatExample {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
String formatted = now.format(formatter);
System.out.println(formatted);
}
}
2025/09/23 10:30:45
4. よく使われるフォーマットパターン
日時の表示にはいくつかの代表的なパターンがあります。以下はよく使われる形式です。
yyyy-MM-dd HH:mm:ss→ 2025-09-23 10:30:00yyyy年MM月dd日 HH時mm分→ 2025年09月23日 10時30分E yyyy/MM/dd→ 火 2025/09/23
5. formatメソッドの応用例
フォーマットは業務システムでも多用されます。請求書に印字する日付を「2025年09月23日」と出力したり、ログファイルに「2025-09-23T10:30:00」とISO形式で記録するなど、用途によって使い分けることが可能です。
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class InvoiceExample {
public static void main(String[] args) {
LocalDateTime date = LocalDateTime.of(2025, 9, 23, 0, 0);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
System.out.println("請求日: " + date.format(formatter));
}
}
請求日: 2025年09月23日
6. Localeを利用した国際化
DateTimeFormatterはLocaleを指定することで、英語やフランス語など各国の形式で出力することも可能です。海外向けのシステムや多言語対応のアプリでは欠かせない機能です。
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class LocaleExample {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy", Locale.US);
System.out.println(now.format(formatter));
}
}
Tuesday, September 23, 2025
7. formatと業務システムでの実践利用
日付のフォーマットはシステム開発においてとても重要です。例えば予約確認メールでは「2025年09月23日 10時30分開始」と丁寧に表示した方が利用者に優しいです。データベース保存用には標準化されたフォーマットを使うことでシステム間の連携もスムーズになります。
8. formatメソッドの注意点
formatを使う際はフォーマットパターンが正しくないとIllegalArgumentExceptionが発生します。小文字と大文字が区別されるので「MM(月)」と「mm(分)」を間違えると意図しない表示になります。初心者がつまずきやすいポイントなので覚えておきましょう。
まとめ
今回の記事では、JavaのLocalDateTimeとformatメソッドを使った日時フォーマットの基本から応用までを丁寧に確認し、日時を扱う場面で必要になる知識を幅広く整理しました。日付と時刻を扱う処理は多くのアプリケーションに欠かせない要素であり、予約管理、業務処理、レポート生成、ログ記録など、さまざまな用途において正確で読みやすい日時表現が求められます。java.timeパッケージは従来のDateやCalendarを扱う際の複雑さを解消し、直感的で安全な設計が採用されているため、初心者であっても扱いやすく、また実務でも安心して利用できる基盤となっています。
LocalDateTimeとDateTimeFormatterを組み合わせることで、「yyyy/MM/dd HH:mm:ss」「yyyy年MM月dd日 HH時mm分」「E yyyy/MM/dd」など、開発者が自由に構成できる表示形式を簡単に生成することができます。フォーマットパターンの選び方によっては、利用者向けの柔らかい表示やログ向けの厳密な書式など、目的に応じた柔軟な出力が可能になります。特に日本語での年月日時分表示や、曜日を含んだ形式などは日常的にも馴染みが深く、システム利用者が読みやすい形に整えることでサービスの使いやすさ向上にもつながります。
また、業務システムでよく登場する「請求日」「発送日」「予約日時」などの記録には、フォーマットメソッドが非常に重宝されます。ミスが許されない重要なデータであるため、年月日と時刻が正しい形で整形されていることが求められ、フォーマッタの誤りがあると全体の信頼性に影響することもあります。そのため、パターン文字の大文字と小文字の違いや、「MM(月)」と「mm(分)」の違い、曜日の表現など、基本的ながら重要な知識を正しく理解しておくことが実務上でも大切です。
フォーマットは単純な文字列変換だけでなく、海外向けアプリや外国語対応のシステムでも使用されます。Localeを指定することで、英語、フランス語、ドイツ語、中国語など、国ごとの自然な表記に切り替えることができ、国際化対応で広く利用されるテクニックとなります。日本語システムと海外システムを共存させる開発現場では、日時の扱い方を統一しておくことがとても重要であり、java.timeの設計はその点でも優れています。
さらに、LocalDateTimeで扱う日時はタイムゾーンを持たないため、サーバ処理・予約処理・日付の比較など、多くの用途で扱いやすい形式です。必要に応じてZonedDateTimeやOffsetDateTimeと使い分けることで、大規模アプリケーションでも正確な日時管理が行えます。今回の記事で紹介したような基本的なフォーマット利用を理解しておくと、日時計算や差分計算、タイムゾーン処理など、より高度な日時処理にもスムーズに進めるようになります。
以下に、記事内容を踏まえたサンプルコードを用意しました。フォーマットの応用や日本語形式、作業でよく使われるパターンをまとめていますので、復習や実務でのテンプレートとして参考にしてみてください。
サンプルプログラム:よく使うフォーマットをまとめて確認
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class FormatSummaryExample {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter jp = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH時mm分");
DateTimeFormatter iso = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
DateTimeFormatter us = DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy", Locale.US);
System.out.println("日本語形式 : " + now.format(jp));
System.out.println("ISO形式 : " + now.format(iso));
System.out.println("英語形式 : " + now.format(us));
}
}
このサンプルでは日本語形式、ISO形式、英語形式を並べて出力しており、目的に応じてフォーマッタを切り替えるだけで多様な日時表現を実現できることがわかります。こうした柔軟さはLocalDateTime.formatの大きな魅力であり、日時を扱うプログラム設計では欠かせない知識です。
生徒
「今日の記事を読んで、日時を好きな形で表示できるのってすごく便利だと感じました!特に日本語の『2025年09月23日』みたいな表示はアプリでもよく見ます。」
先生
「そうだね。フォーマットを正しく使えば利用者に伝わりやすい表示ができるし、ログやデータベースでは統一した書式を保つことが大切になるよ。」
生徒
「Localeを使うと英語や他の言語にも対応できるのが驚きでした。海外向けサービスなら必須ですね。」
先生
「その通り。日時の表現は国ごとに違うから、それを自動で切り替えられる仕組みはとても役立つんだ。フォーマットのパターン文字を間違えないようにだけ注意してね。」
生徒
「MMとmmの違いは絶対に覚えておきます!大文字が月で小文字が分ですね。」
先生
「その理解で完璧だよ。今日の内容がしっかり身につけば、日時処理で困ることは格段に減るはずだ。どんどんコードを書いて慣れていこう。」