2025.03.11
現在日時の文字列を生成(DateTimeFormatterクラスを使用)
目次
はじめに
ここでは、LocalDateTimeクラスで取得した現在日時から文字列を生成する方法を詳しく説明します。
出力する文字列の書式を指定することができるDateTimeFormatterクラスを使います。
2025/03/09 2025年03月09日 2025/03/09 (日) 西暦2025/03/09 (日)
DateTimeFormatterクラスを使う方法
LocalDateTimeクラスは、日付と時刻を両方を操作するためのクラスで、Java 8以降に導入されました。
Dateクラスも日付と時刻の両方を扱えますが、LocalDateTimeクラスの方が新しいAPIなので、LocalDateTimeクラスを使うのをお勧めします。
LocalDateTime.nowメソッド
static LocalDateTime now()
・デフォルトのタイムゾーンのシステム・クロックから現在の日時を取得 パラメータ なし 戻り値 現在の日時のLocalDateTimeオブジェクト
DateTimeFormatter.ofPatternメソッド
static DateTimeFormatter DateTimeFormatter.ofPattern( String pattern )
・指定されたパターンを使用してフォーマッタを作成します。 パラメータ pattern : パターン 戻り値 指定されたパターンのフォーマッタ
static DateTimeFormatter DateTimeFormatter.ofPattern( String pattern, Locale locale )
・指定されたパターンおよびロケールを使用してフォーマッタを作成します。 パラメータ pattern : パターン locale : ロケール 戻り値 指定されたパターン、ロケールのフォーマッタ
LocalDateTime.formatメソッド
String format( DateTimeFormatter formatter )
・指定されたフォーマッタを使用して日付/時間を書式設定 パラメータ formatter : フォーマッタ 以下は、フォーマットに使う主な文字です。
文字 | 意味 | 備考 |
---|---|---|
G | 年号 | 「西暦」、「AD」などの年号を表します。 |
y | 年 | 紀元での年を表します。yyyyで4桁の0埋めになります。2025年の場合「2025」になります。yyで2桁の0埋めになります。2025年の場合「25」になります。 |
M | 月 | 月を表します。MMで2桁の0埋めになります。3月の場合「03」になります。 |
d | 日 | 日を表します。ddで2桁の0埋めになります。9日の場合「09」になります。 |
h | 時 | 時を表します。hhで2桁の0埋めになります。1時の場合「01」になります。 |
m | 分 | 分を表します。mmで2桁の0埋めになります。5分の場合「05」になります。 |
s | 秒 | 秒を表します。ssで2桁の0埋めになります。4秒の場合「04」になります。 |
E | 曜日 | 曜日を表します。「月」、「金」、「Mon」、「Fri」などです。 |
Javaソースコード - 日付だけを出力
以下は、LocalDateTimeクラスを使って現在日付だけを、いろいろなフォーマットでコンソール出力するJavaソースコードです。現在時間は出力しません。
DateString1.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Locale; public class DateString1 { // 指定したフォーマットdateformatでdateの文字列を生成(日本語) private static String createDateString_JP( String dateformat, LocalDateTime date ) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern( dateformat, Locale.JAPAN ); return date.format( formatter ); } // 指定したフォーマットdateformatでdateの文字列を生成(英語) private static String createDateString_EN( String dateformat, LocalDateTime date ) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern( dateformat, Locale.ENGLISH ); return date.format( formatter ); } // メイン public static void main( String[] args ) { // 生成した文字列を格納する変数を宣言 String datestring; // 生成するフォーマット String dateformat; // 現在の日時をdateに代入 LocalDateTime date = LocalDateTime.now(); // yyyy/MM/dd dateformat = "yyyy/MM/dd"; datestring = createDateString_JP( dateformat, date ); // 日本語 System.out.println( "JP " + dateformat + "\t" + datestring ); datestring = createDateString_EN( dateformat, date ); // 英語 System.out.println( "EN " + dateformat + "\t" + datestring ); System.out.println( ); // 改行 // y/M/d dateformat = "y/M/d"; datestring = createDateString_JP( dateformat, date ); // 日本語 System.out.println( "JP " + dateformat + "\t" + datestring ); datestring = createDateString_EN( dateformat, date ); // 英語 System.out.println( "EN " + dateformat + "\t" + datestring ); System.out.println( ); // 改行 // yyyy年MM年dd日 dateformat = "yyyy年MM年dd日"; datestring = createDateString_JP( dateformat, date ); // 日本語 System.out.println( "JP " + dateformat + "\t" + datestring ); datestring = createDateString_EN( dateformat, date ); // 英語 System.out.println( "EN " + dateformat + "\t" + datestring ); System.out.println( ); // 改行 // yyyy/MM/dd (E) dateformat = "yyyy/MM/dd (E)"; datestring = createDateString_JP( dateformat, date ); // 日本語 System.out.println( "JP " + dateformat + "\t" + datestring ); datestring = createDateString_EN( dateformat, date ); // 英語 System.out.println( "EN " + dateformat + "\t" + datestring ); System.out.println( ); // 改行 // Gyyyy/MM/dd (E) dateformat = "Gyyyy/MM/dd (E)"; datestring = createDateString_JP( dateformat, date ); // 日本語 System.out.println( "JP " + dateformat + "\t" + datestring ); datestring = createDateString_EN( dateformat, date ); // 英語 System.out.println( "EN " + dateformat + "\t" + datestring ); System.out.println( ); // 改行 // Gyyyy年MM月dd日(E) dateformat = "Gyyyy年MM月dd日(E)"; datestring = createDateString_JP( dateformat, date ); // 日本語 System.out.println( "JP " + dateformat + "\t" + datestring ); datestring = createDateString_EN( dateformat, date ); // 英語 System.out.println( "EN " + dateformat + "\t" + datestring ); System.out.println( ); // 改行 // G dateformat = "G"; datestring = createDateString_JP( dateformat, date ); // 日本語 System.out.println( "JP " + dateformat + "\t" + datestring ); datestring = createDateString_EN( dateformat, date ); // 英語 System.out.println( "EN " + dateformat + "\t" + datestring ); System.out.println( ); // 改行 // E dateformat = "E"; datestring = createDateString_JP( dateformat, date ); // 日本語 System.out.println( "JP " + dateformat + "\t" + datestring ); datestring = createDateString_EN( dateformat, date ); // 英語 System.out.println( "EN " + dateformat + "\t" + datestring ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis DateString1.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac DateString1.java
実行
C:\talavax\javasample>java DateString1
実行結果
JP yyyy/MM/dd 2025/03/10 EN yyyy/MM/dd 2025/03/10 JP y/M/d 2025/3/10 EN y/M/d 2025/3/10 JP yyyy年MM年dd日 2025年03年10日 EN yyyy年MM年dd日 2025年03年10日 JP yyyy/MM/dd (E) 2025/03/10 (月) EN yyyy/MM/dd (E) 2025/03/10 (Mon) JP Gyyyy/MM/dd (E) 西暦2025/03/10 (月) EN Gyyyy/MM/dd (E) AD2025/03/10 (Mon) JP Gyyyy年MM月dd日(E) 西暦2025年03月10日(月) EN Gyyyy年MM月dd日(E) AD2025年03月10日(Mon) JP G 西暦 EN G AD JP E 月 EN E Mon
Javaソースコードの解説 - 日付だけを出力
それでは、このソースコードを上から順番に解説していきます。
001
import java.time.LocalDateTime;
「java.time」パッケージにあるLocalDateTimeクラスを使うための記述です。
002
import java.time.format.DateTimeFormatter;
「java.time.format」パッケージにあるDateTimeFormatterクラスを使うための記述です。
003
import java.util.Locale;
「java.util」パッケージにあるLocaleクラスを使うための記述です。
005
public class DateString1 {
クラス名を、DateString1としています。
006 007 008 009 010 011
// 指定したフォーマットdateformatでdateの文字列を生成(日本語) private static String createDateString_JP( String dateformat, LocalDateTime date ) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern( dateformat, Locale.JAPAN ); return date.format( formatter ); }
dateformatで指定したフォーマットで、dateの日時を文字列を戻すメソッドです。ロケールに「Locale.JAPAN」を指定しています。
指定したフォーマットに「G」(年号)、「E」(曜日)が含まれる場合は、日本語に変換します。
013 014 015 016 017 018
// 指定したフォーマットdateformatでdateの文字列を生成(英語) private static String createDateString_EN( String dateformat, LocalDateTime date ) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern( dateformat, Locale.ENGLISH ); return date.format( formatter ); }
dateformatで指定したフォーマットで、dateの日時を文字列を戻すメソッドです。ロケールに「Locale.ENGLISH」を指定しています。
指定したフォーマットに「G」(年号)、「E」(曜日)が含まれる場合は、英語に変換します。
020 021
// メイン public static void main( String[] args ) {
022 023
// 生成した文字列を格納する変数を宣言 String datestring;
025 026
// 生成するフォーマット String dateformat;
生成するフォーマットを格納する変数dateformatを宣言しています。
028 029
// 現在の日時をdateに代入
LocalDateTime date = LocalDateTime.now();
現在の日時を取得して、dateに代入しています。
031 032
// yyyy/MM/dd dateformat = "yyyy/MM/dd";
dateformatにフォーマット「yyyy/MM/dd」を代入しています。
「yyyy」で西暦を4桁、「MM」で月を0埋め2桁、「dd」で日を0埋め2桁で出力する設定です。
「yyyy」と「MM」と「dd」を区切る文字は半角のスラッシュ「/」です。
2025年3月10日に実行した生成文字列
2025/03/10
034
datestring = createDateString_JP( dateformat, date ); // 日本語
日本語の文字列を生成するcreateDateString_JPメソッドに、フォーマットdateformatと日時dateを渡して文字列を生成し、String型の変数datestringに代入しています。
035
System.out.println( "JP " + dateformat + "\t" + datestring );
037
datestring = createDateString_EN( dateformat, date ); // 英語
英語の文字列を生成するcreateDateString_ENメソッドに、フォーマットdateformatと日時dateを渡して文字列を生成し、String型の変数datestringに代入しています。
038
System.out.println( "EN " + dateformat + "\t" + datestring );
039
System.out.println( ); // 改行
改行しています。
042 043 044 045 046 047 048 049 050
// y/M/d dateformat = "y/M/d"; datestring = createDateString_JP( dateformat, date ); // 日本語 System.out.println( "JP " + dateformat + "\t" + datestring ); datestring = createDateString_EN( dateformat, date ); // 英語 System.out.println( "EN " + dateformat + "\t" + datestring ); System.out.println( ); // 改行
dateformatにフォーマット「y/M/d」を代入しています。
「y」で西暦を1桁~4桁で、「M」で月を1桁または2桁で、「d」で日を1桁または2桁で出力する設定です。
「y」と「M」と「d」を区切る文字は半角のスラッシュ「/」です。
2025年3月9日に実行した生成文字列
2025/3/9
2025年3月10日に実行した生成文字列
2025/3/10
053 054 055 056 057 058 059 060 061
// yyyy年MM年dd日 dateformat = "yyyy年MM年dd日"; datestring = createDateString_JP( dateformat, date ); // 日本語 System.out.println( "JP " + dateformat + "\t" + datestring ); datestring = createDateString_EN( dateformat, date ); // 英語 System.out.println( "EN " + dateformat + "\t" + datestring ); System.out.println( ); // 改行
dateformatにフォーマット「yyyy年MM年dd日」を代入しています。
「yyyy」で西暦を4桁、「MM」で月を0埋め2桁、「dd」で日を0埋め2桁で出力する設定です。
「yyyy」の後ろに「年」、「MM」の後ろに「月」、「dd」日の後ろに「日」を使って区切っています。
2025年3月10日に実行した生成文字列
2025年03年10日
064 065 066 067 068 069 070 071 072
// yyyy/MM/dd (E) dateformat = "yyyy/MM/dd (E)"; datestring = createDateString_JP( dateformat, date ); // 日本語 System.out.println( "JP " + dateformat + "\t" + datestring ); datestring = createDateString_EN( dateformat, date ); // 英語 System.out.println( "EN " + dateformat + "\t" + datestring ); System.out.println( ); // 改行
dateformatにフォーマット「yyyy/MM/dd (E)」を代入しています。
「yyyy」と「MM」と「dd」を区切る文字は半角のスラッシュ「/」です。「dd」の後ろの半角カッコ「(」と「)」で、曜日を表す「E」を囲んでいます。
2025年3月10日に実行した生成文字列(日本語生成のメソッド)
2025/03/10 (月)
2025年3月10日に実行した生成文字列(英語生成のメソッド)
2025/03/10 (Mon)
075 076 077 078 079 080 081 082 083
// Gyyyy/MM/dd (E) dateformat = "Gyyyy/MM/dd (E)"; datestring = createDateString_JP( dateformat, date ); // 日本語 System.out.println( "JP " + dateformat + "\t" + datestring ); datestring = createDateString_EN( dateformat, date ); // 英語 System.out.println( "EN " + dateformat + "\t" + datestring ); System.out.println( ); // 改行
dateformatにフォーマット「Gyyyy/MM/dd (E)」を代入しています。
「Gyyyy」と「MM」と「dd」を区切る文字は半角のスラッシュ「/」です。「dd」の後ろの半角カッコ「(」と「)」で、曜日を表す「E」を囲んでいます。「yyyy」の前の「G」は西暦を表しています。
2025年3月10日に実行した生成文字列(日本語生成のメソッド)
西暦2025/03/10 (月)
2025年3月10日に実行した生成文字列(英語生成のメソッド)
AD2025/03/10 (Mon)
086 087 088 089 090 091 092 093 094
// Gyyyy年MM月dd日(E) dateformat = "Gyyyy年MM月dd日(E)"; datestring = createDateString_JP( dateformat, date ); // 日本語 System.out.println( "JP " + dateformat + "\t" + datestring ); datestring = createDateString_EN( dateformat, date ); // 英語 System.out.println( "EN " + dateformat + "\t" + datestring ); System.out.println( ); // 改行
dateformatにフォーマット「Gyyyy年MM月dd日(E)」を代入しています。
「Gyyyy」の後ろに「年」、「MM」の後ろに「月」、「dd」日の後ろに「日」を使って区切っています。「dd」の後ろの半角カッコ「(」と「)」で、曜日を表す「E」を囲んでいます。「yyyy」の前の「G」は西暦を表しています。
2025年3月10日に実行した生成文字列(日本語生成のメソッド)
西暦2025年03月10日(月)
2025年3月10日に実行した生成文字列(英語生成のメソッド)
AD2025年03月10日(Mon)
西暦の「G」と曜日の「E」は、日本語生成のメソッドで生成するとそれぞれ「西暦」と「月」(月曜日)に、英語生成のメソッドで生成するとそれぞれ「AD」と「Mon」(Mondayの省略形)になります。
区切りの「年」と「月」と「日」は英語にはなりません。
097 098 099 100 101 102 103 104 105
// G dateformat = "G"; datestring = createDateString_JP( dateformat, date ); // 日本語 System.out.println( "JP " + dateformat + "\t" + datestring ); datestring = createDateString_EN( dateformat, date ); // 英語 System.out.println( "EN " + dateformat + "\t" + datestring ); System.out.println( ); // 改行
dateformatにフォーマット「G」を代入しています。
2025年3月10日に実行した生成文字列(日本語生成のメソッド)
西暦
2025年3月10日に実行した生成文字列(英語生成のメソッド)
AD
108 109 110 111 112 113 114 115
// E dateformat = "E"; datestring = createDateString_JP( dateformat, date ); // 日本語 System.out.println( "JP " + dateformat + "\t" + datestring ); datestring = createDateString_EN( dateformat, date ); // 英語 System.out.println( "EN " + dateformat + "\t" + datestring );
dateformatにフォーマット「E」を代入しています。
2025年3月10日に実行した生成文字列(日本語生成のメソッド)
月
2025年3月10日に実行した生成文字列(英語生成のメソッド)
Mon
Javaソースコード - 日付と時間を出力
このソースコードは、LocalDateTimeクラスを使って現在日付と現在時間の両方を、いろいろなフォーマットでコンソール出力するものです。
DateString2.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096
import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Locale; public class DateString2 { // 指定したフォーマットdateformatでdateの文字列を生成(日本語) private static String createDateString_JP( String dateformat, LocalDateTime date ) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern( dateformat, Locale.JAPAN ); return date.format( formatter ); } // 指定したフォーマットdateformatでdateの文字列を生成(英語) private static String createDateString_EN( String dateformat, LocalDateTime date ) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern( dateformat, Locale.ENGLISH ); return date.format( formatter ); } // メイン public static void main( String[] args ) { // 生成した文字列を格納する変数を宣言 String datestring; // 生成するフォーマット String dateformat; // 現在の日時をdateに代入 LocalDateTime date = LocalDateTime.now(); // yyyy/MM/dd HH:mm:ss dateformat = "yyyy/MM/dd HH:mm:ss"; datestring = createDateString_JP( dateformat, date ); // 日本語 System.out.println( "JP " + dateformat + "\t" + datestring ); datestring = createDateString_EN( dateformat, date ); // 英語 System.out.println( "EN " + dateformat + "\t" + datestring ); System.out.println( ); // 改行 // y/M/d H:m:s dateformat = "y/M/d H:m:s"; datestring = createDateString_JP( dateformat, date ); // 日本語 System.out.println( "JP " + dateformat + "\t" + datestring ); datestring = createDateString_EN( dateformat, date ); // 英語 System.out.println( "EN " + dateformat + "\t" + datestring ); System.out.println( ); // 改行 // yyyy年MM年dd日 HH時mm分ss秒 dateformat = "yyyy年MM年dd日 HH時mm分ss秒"; datestring = createDateString_JP( dateformat, date ); // 日本語 System.out.println( "JP " + dateformat + "\t" + datestring ); datestring = createDateString_EN( dateformat, date ); // 英語 System.out.println( "EN " + dateformat + "\t" + datestring ); System.out.println( ); // 改行 // yyyy/MM/dd (E) HH:mm:ss dateformat = "yyyy/MM/dd (E) HH:mm:ss"; datestring = createDateString_JP( dateformat, date ); // 日本語 System.out.println( "JP " + dateformat + "\t" + datestring ); datestring = createDateString_EN( dateformat, date ); // 英語 System.out.println( "EN " + dateformat + "\t" + datestring ); System.out.println( ); // 改行 // Gyyyy/MM/dd (E) HH:mm:ss dateformat = "Gyyyy/MM/dd (E) HH:mm:ss"; datestring = createDateString_JP( dateformat, date ); // 日本語 System.out.println( "JP " + dateformat + "\t" + datestring ); datestring = createDateString_EN( dateformat, date ); // 英語 System.out.println( "EN " + dateformat + "\t" + datestring ); System.out.println( ); // 改行 // Gyyyy年MM月dd日(E) dateformat = "Gyyyy年MM月dd日(E) HH時mm分ss秒"; datestring = createDateString_JP( dateformat, date ); // 日本語 System.out.println( "JP " + dateformat + "\t" + datestring ); datestring = createDateString_EN( dateformat, date ); // 英語 System.out.println( "EN " + dateformat + "\t" + datestring ); System.out.println( ); // 改行 } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis DateString2.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac DateString2.java
実行
C:\talavax\javasample>java DateString2
実行結果
JP yyyy/MM/dd HH:mm:ss 2025/03/11 12:48:30 EN yyyy/MM/dd HH:mm:ss 2025/03/11 12:48:30 JP y/M/d H:m:s 2025/3/11 12:48:30 EN y/M/d H:m:s 2025/3/11 12:48:30 JP yyyy年MM年dd日 HH時mm分ss秒 2025年03年11日 12時48分30秒 EN yyyy年MM年dd日 HH時mm分ss秒 2025年03年11日 12時48分30秒 JP yyyy/MM/dd (E) HH:mm:ss 2025/03/11 (火) 12:48:30 EN yyyy/MM/dd (E) HH:mm:ss 2025/03/11 (Tue) 12:48:30 JP Gyyyy/MM/dd (E) HH:mm:ss 西暦2025/03/11 (火) 12:48:30 EN Gyyyy/MM/dd (E) HH:mm:ss AD2025/03/11 (Tue) 12:48:30 JP Gyyyy年MM月dd日(E) HH時mm分ss秒 西暦2025年03月11日(火) 12時48分30秒 EN Gyyyy年MM月dd日(E) HH時mm分ss秒 AD2025年03月11日(Tue) 12時48分30秒
以上です。
日付に関するコンテンツ
「日付」に関係があるコンテンツをまとめています。