前回の記事では、Javaで日付や時刻を扱うための基本的なクラスについて解説したよね。java.time を使いこなそう!日付と時刻の基本 | ToolDocs
今回は、取得した日付や時刻の情報を、人間が読みやすい形にしたり、逆に文字列から日付や時刻の情報を抽出したりする方法、つまり「フォーマット(整形)」と「パース(解析)」について深掘りしていくよ。これ、プログラムを作る上でめちゃくちゃ重要だからしっかりマスターしていこう!
フォーマットって何?
フォーマットとは、LocalDateやLocalDateTimeといった日付・時刻オブジェクトに入っている情報を、指定した形式の文字列に変換することだよ。例えば、「2025年6月15日」って表示したり、「2025/06/15 14:30:00」って表示したり、日付の順序を変えたりとか、いろいろな表示形式にしたい場面ってたくさんあるよね。それを実現するのがフォーマットなんだ。
Javaではjava.time.format.DateTimeFormatterクラスを使うと、簡単に日付や時刻のフォーマットができるんだ。
例1:日付を「yyyy年MM月dd日」形式で表示
Java
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class DateFormatExample1 {
public static void main(String[] args) {
LocalDate today = LocalDate.now(); // 今日の日付を取得
// フォーマッターを作成。「yyyy年MM月dd日」形式を指定
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
// フォーマットして文字列に変換
String formattedDate = today.format(formatter);
System.out.println("今日の日付:" + formattedDate); // 例:今日の日付:2025年06月15日
}
}
DateTimeFormatter.ofPattern()メソッドに、表示したい形式のパターン文字列を渡すんだ。パターン文字の意味は後でまとめるね。

paizaで実行した結果
例2:日時を「yyyy/MM/dd HH:mm:ss」形式で表示
Java
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class DateTimeFormatExample2 {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now(); // 現在の日時を取得
// フォーマッターを作成。「yyyy/MM/dd HH:mm:ss」形式を指定
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
// フォーマットして文字列に変換
String formattedDateTime = now.format(formatter);
System.out.println("現在の日時:" + formattedDateTime); // 例:現在の日時:2025/06/15 02:44:55
}
}
このように、LocalDateやLocalDateTimeのformat()メソッドにDateTimeFormatterのインスタンスを渡すだけで、好きな形式に変換できるよ。

paizaで実行した結果
日付・時刻のパターン文字(一部)
| パターン文字 | 説明 | 例(2025年6月15日 02時44分55秒) |
|---|---|---|
y | 年 | 2025 |
M | 月(1-12) | 6 |
MM | 月(01-12) | 06 |
d | 日(1-31) | 15 |
dd | 日(01-31) | 15 |
H | 時(0-23) | 2 |
HH | 時(00-23) | 02 |
m | 分(0-59) | 44 |
mm | 分(00-59) | 44 |
s | 秒(0-59) | 55 |
ss | 秒(00-59) | 55 |
E | 曜日(省略形) | 日 |
EEEE | 曜日(完全形) | 日曜日 |
パースって何?
パースとは、フォーマットと逆の操作で、指定した形式の文字列から、LocalDateやLocalDateTimeなどの日付・時刻オブジェクトを生成することを指すよ。例えば、ユーザーが入力した「2025/06/15」という文字列を、プログラムで扱えるLocalDateオブジェクトに変換したい場合に使うんだ。
こちらもDateTimeFormatterクラスを使って行うよ。
例3:文字列から日付をパース
Java
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class DateParseExample3 {
public static void main(String[] args) {
String dateString = "2024/12/25"; // 文字列形式の日付
// フォーマッターを作成。パースする文字列の形式と一致させる!
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
// 文字列からLocalDateオブジェクトにパース
LocalDate parsedDate = LocalDate.parse(dateString, formatter);
System.out.println("パースした日付:" + parsedDate); // パースした日付:2024-12-25
}
}
LocalDate.parse()メソッドの第二引数に、パースしたい文字列の形式に合わせたDateTimeFormatterのインスタンスを渡すんだ。ここが重要で、フォーマッターのパターン文字列と、パースしたい文字列の形式が完全に一致している必要があるよ。もし一致しないと、java.time.format.DateTimeParseExceptionというエラーが発生しちゃうから気を付けてね。

paizaで実行した結果
例4:文字列から日時をパース(フォーマットのパターン不一致の例)
Java
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
public class DateTimeParseExample4 {
public static void main(String[] args) {
String dateTimeString = "2025-01-01 10:30:00"; // 文字列形式の日時
// パースする文字列の形式と異なるフォーマッターを作成
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); // ここが「-」ではなく「/」になっている
try {
// パースを試みる
LocalDateTime parsedDateTime = LocalDateTime.parse(dateTimeString, formatter);
System.out.println("パースした日時:" + parsedDateTime);
} catch (DateTimeParseException e) {
System.err.println("パースに失敗しました: " + e.getMessage());
System.err.println("日付文字列とフォーマットパターンが一致しているか確認してください。");
}
}
}
この例だと、文字列は「2025-01-01」なのに、フォーマッターは「yyyy/MM/dd」となっているからエラーになるよね。エラーハンドリングも重要だから、try-catchブロックを使って例外処理も覚えておくといいよ。

paizaで実行した結果
Locale(ロケール)について
DateTimeFormatterは、**Locale(ロケール)**を指定することで、国や地域に応じた表示形式に自動で対応してくれるんだ。例えば、日付の表示順序や曜日の表記などだね。
例5:Localeを指定してフォーマット
Java
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class LocaleFormatExample5 {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
// 日本語ロケールでフォーマット
DateTimeFormatter jpFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 EEEE HH時mm分ss秒", Locale.JAPAN);
String jpFormatted = now.format(jpFormatter);
System.out.println("日本語表示:" + jpFormatted); // 例:日本語表示:2025年06月15日 日曜日 02時44分55秒
// 英語(アメリカ)ロケールでフォーマット
DateTimeFormatter usFormatter = DateTimeFormatter.ofPattern("EEEE, MMMM d, yyyy HH:mm:ss", Locale.US);
String usFormatted = now.format(usFormatter);
System.out.println("英語表示(US):" + usFormatted); // 例:英語表示(US):Sunday, June 15, 2025 02:44:55
}
}
Locale.JAPANやLocale.USのように指定することで、その地域の標準的な表現に自動的に変換してくれるんだ。これは、国際的なアプリケーションを作る場合にとても役立つ機能だよ。

paizaで実行した結果
まとめ
今回は、Javaで日付や時刻を扱う上で欠かせない「フォーマット」と「パース」について解説したよ。
- フォーマット:日付・時刻オブジェクトを好きな形式の文字列に変換すること。
- パース:文字列を日付・時刻オブジェクトに変換すること。
どちらもjava.time.format.DateTimeFormatterクラスを使うのがポイントだね。特にパースするときは、文字列の形式とフォーマッターのパターンが完全に一致している必要があるから注意してね!
これで日付や時刻の表示形式を自由自在に操れるようになったはず!いろんなパターンを試してみて、理解を深めていこう。


コメント