Home > サンプル集 > Javaサンプル集 > 日付の文字列フォーマット変換
日付の文字列フォーマット変換
このページには、以下のサンプルを掲載しています。
下の項目をクリックをすると各サンプルにジャンプします。
※2週間以内の新着記事はNewアイコン、更新記事はUpアイコンが表示されます。
- 日付の文字列フォーマット(西暦年)( DateFormatSample01.java )
- 日付の文字列フォーマット(和暦年)( DateFormatSample02.java )
- 日付の文字列フォーマット(月)( DateFormatSample03.java )
- 日付の文字列フォーマット(英語の月)( DateFormatSample04.java )
- 日付の文字列フォーマット(日にち) ( DateFormatSample05.java )
- 日付の文字列フォーマット(曜日) ( DateFormatSample06.java )
- 日付の文字列フォーマット(桁揃え) ( DateFormatSample07.java )
- 日付の文字列フォーマット(和暦の月)( DateFormatSample08.java、JpMonth.java)
1.日付の文字列フォーマット(西暦年)
[ サンプルプログラムのソースコード -DateFormatSample01.java - ]
- import java.util.Calendar;
- public class DateFormatSample01 {
- public static void main(String[] args) {
- Calendar cal = Calendar.getInstance();
- System.out.println(String.format("西暦年の表示:%1$tY",cal));
- System.out.println(String.format("西暦年の表示(4桁年/100):%1$tC",cal));
- System.out.println(String.format("西暦年の表示(2桁):%1$ty",cal));
- }
- }
|
[ サンプルプログラムの実行結果 ]
西暦年の表示:2008
西暦年の表示(4桁年/100):20
西暦年の表示(2桁):08
|
[ サンプルプログラムの解説 ]
青字部分「format」は、数値、文字列、日付、時刻などを指定した書式に変換するStringクラスのメソッドです。
赤字の部分は、書式文字列と言ってどんな書式で表示するか指定する部分です。
書式文字列(赤字部分)「%1」の部分で1番目の引数であることを示しています。
上記の場合では、%1=calということになります。「$t」の部分は日付の書式であることを表しています。
その後に続く文字で日付の書式指定をどのように整形するか指定します。
上記9行目の場合は、実行した日付の西暦年を4桁で表示(赤字Yの部分)するように指定しています。
10行目は、4桁の西暦年表記を100で割った値を表示(赤字Cの部分)しています。
11行目は西暦年を2桁で表示(赤字yの部分)するよう指定しています。
2. 日付の文字列フォーマット(和暦年)
[ サンプルプログラムのソースコード - DateFormatSample02.java - ]
- import java.text.SimpleDateFormat;
- import java.util.Calendar;
- import java.util.Locale;
- public class DateFormatSample02 {
- public static void main(String[] args) {
- // ロケールの設定(和暦用のロケール)
- Locale locale = new Locale("ja","JP","JP");
- // カレンダーオブジェクトの生成
- Calendar cal = Calendar.getInstance();
-
- // 和暦のロケールを指定して年をフォーマットする
- SimpleDateFormat sdf = new SimpleDateFormat("GGGGy年",locale);
- String dateStr = sdf.format(cal.getTime());
-
- // フォーマットされた日付の表示
- System.out.println(dateStr);
- // 年の短縮名を表示
- sdf.applyPattern("Gy");
- dateStr = sdf.format(cal.getTime());
- System.out.println(dateStr);
-
- // 100年前の和暦を表示してみる
- sdf.applyPattern("GGGGy年");
- cal.add(Calendar.YEAR, -100);
- dateStr = sdf.format(cal.getTime());
- System.out.println(dateStr);
- }
- }
|
[ サンプルプログラムの実行結果 ]
[ サンプルプログラムの解説 ]
和暦を表示するには、まず和暦用のロケールを設定します(9行目)
和暦ロケールを設定した後、SimpleDateFormatオブジェクトを生成します(17行目)この時、和暦ロケールを指定します。
サンプルでは、同時に和暦表示用のフォーマットを指定しています。17行目の「GGGG」と書かれた部分が年号(明治、大正、昭和、平成)にフォーマットされます。
続く「y」は年にフォーマットされます。SimpleDateFormatオブジェクトのformatメソッド
を使うと和暦フォーマットされた文字列を得られます。formatメソッドの引数には、Dateオブジェクトを渡します。
Dateオブジェクトは、Calendarオブジェクトから生成できます。SimpleDateFormatオブジェクトのappleyPatternメソッドを使うと
フォーマットの再設定が出来ます(22行目)サンプルでは年の短縮名を再設定しています。「G」の部分が年号の短縮名(S、Hなど)にフォーマットされます。
3. 日付の文字列フォーマット(月)
[ サンプルプログラムのソースコード - DateFormatSample03.java - ]
- import java.util.Calendar;
- public class DateFormatSample03 {
- public static void main(String[] args) {
- Calendar cal = Calendar.getInstance();
- System.out.println(String.format("月の表示:%1$tB",cal));
- System.out.println(String.format("月の表示(省略名):%1$tb",cal));
- System.out.println(String.format("月の表示(2桁):%1$tm",cal));
- }
- }
|
[ サンプルプログラムの実行結果 ]
月の表示:9月
月の表示(省略名):9
月の表示(2桁):09
|
[ サンプルプログラムの解説 ]
Sample3_1と同じく1番目の引数に対して日付の書式を指定しています。9行目は、月の完全名称(B)の指定。
10行目は、月の省略名(b)。11行名は、月の2桁表記(m)の指定となっています。
4. 日付の文字列フォーマット(英語の月)
[ サンプルプログラムのソースコード - DateFormatSample04.java - ]
- import java.util.Calendar;
- import java.util.Locale;
- public class DateFormatSample04 {
- public static void main(String[] args) {
- Calendar cal = Calendar.getInstance();
- System.out.println(String.format(Locale.ENGLISH,"月の表示:%1$tB",cal));
- System.out.println(String.format(Locale.ENGLISH,"月の表示(省略名):%1$tb",cal));
- System.out.println(String.format(Locale.ENGLISH,"月の表示(2桁):%1$tm",cal));
- }
- }
|
[ サンプルプログラムの実行結果 ]
月の表示:September
月の表示(省略名):Sep
月の表示(2桁):09
|
[ サンプルプログラムの解説 ]
書式指定は、Sample3_2と同じです。違うのは、赤字の部分でロケールと言います。
ロケールを指定することにより地域に応じた表記に変更できます。英語圏の場合は、英語表記。
中国圏の場合は、中国語表記と言った具合に。上記の例では、英語表記を指定しています。
Sample3_1やSample3_2のようにロケールを指定していない場合はデフォルトのロケールが使用されます。
Sample3_1で表示している西暦年の表示の場合は、ロケール指定が英語でも日本語でも表示は変わりません。
5. 日付の文字列フォーマット(日にち)
[ サンプルプログラムのソースコード - DateFormatSample05.java - ]
- import java.util.Calendar;
- public class DateFormatSample05 {
- public static void main(String[] args) {
- Calendar cal = Calendar.getInstance();
- cal.set(Calendar.DAY_OF_MONTH, 3);
- System.out.println(String.format("日の表示(年初からの日数):%1$tj",cal));
- System.out.println(String.format("日の表示(月初からの日数(2桁表記)):%1$td",cal));
- System.out.println(String.format("日の表示(月初からの日数):%1$te",cal));
- }
- }
|
[ サンプルプログラムの実行結果 ]
日の表示(年初からの日数):247
日の表示(月初からの日数(2桁表記)):03
日の表示(月初からの日数):3
|
[ サンプルプログラムの解説 ]
日の書式指定です。10行目は、年初からの日数。
上記の実行結果では、Calendarクラスが2008年9月3日に設定されているので、247となっています。
1月1日に設定すれば、この数字は1となります。11行目は月初からの日数となります。
9月3日の設定なので03となっています。1日〜9日までは、日にちの前に0が付加されます。
12行目も月初からの日数となりますが、1日〜9日の場合でも日にちの前に0は付加されません。
6. 日付の文字列フォーマット(曜日)
[ サンプルプログラムのソースコード - DateFormatSample06.java - ]
- import java.util.Calendar;
- import java.util.Locale;
- public class DateFormatSample06 {
- public static void main(String[] args) {
- Calendar cal = Calendar.getInstance();
- System.out.println(String.format("曜日の表示(曜日の短縮名):%1$ta",cal));
- System.out.println(String.format("曜日の表示(曜日の完全名):%1$tA",cal));
- System.out.println();
- System.out.println("英語表記");
- Locale.setDefault(Locale.ENGLISH);
- System.out.println(String.format("曜日の表示(曜日の短縮名):%1$ta",cal));
- System.out.println(String.format("曜日の表示(曜日の完全名):%1$tA",cal));
- System.out.println();
- System.out.println("中国表記");
- Locale.setDefault(Locale.CHINESE);
- System.out.println(String.format("曜日の表示(曜日の短縮名):%1$ta",cal));
- System.out.println(String.format("曜日の表示(曜日の完全名):%1$tA",cal));
- }
- }
|
[ サンプルプログラムの実行結果 ]
曜日の表示(曜日の短縮名):月
曜日の表示(曜日の完全名):月曜日
英語表記
曜日の表示(曜日の短縮名):Mon
曜日の表示(曜日の完全名):Monday
中国語表記
曜日の表示(曜日の短縮名):星期一
曜日の表示(曜日の完全名):星期一
|
[ サンプルプログラムの解説 ]
曜日の日付指定です。短縮名の指定が「a」完全名の指定が「A」となります。
曜日もロケールによって表示が異なります。
Sample3_3では、formatメソッドの引数としてロケール指定をしていましたが、
上記の例では、ロケールのデフォルト設定でロケールの変更を行っています。
14行目の赤字部分でデフォルトロケールを英語に変更。19行目の赤字部分で中国語に変更しています。
中国語で月曜日は星期一と言うみたいですね。。。
7. 日付の文字列フォーマット(桁揃え)
[ サンプルプログラムのソースコード - DateFormatSample07.java - ]
- import java.util.Calendar;
- import java.util.Locale;
- public class DateFormatSample07 {
- public static void main(String[] args) {
- Calendar cal = Calendar.getInstance();
- System.out.println(String.format("%1$tY 年 %1$tb 月 %1$te 日は、%1$-8ta 曜日",cal));
- System.out.println(String.format("%1$tY 年 %1$tb 月 %1$te 日は、%1$8ta 曜日",cal));
- }
- }
|
[ サンプルプログラムの実行結果 ]
2008 年 9 月 26 日は、金 曜日
2008 年 9 月 26 日は、 金 曜日
|
[ サンプルプログラムの解説 ]
日付の書式指定では、桁数、左揃えの指定が出来ます。
9行目赤字の「-」の部分で左揃えの指定をしています。
「-」の後ろの数字は、最小桁数の指定です。上記の例では、最小桁数を8桁に指定しています。
桁数が足りない場合は、空白で埋められます。
10行目は左揃えの指定はしていないので右揃え8桁で表示されています。
8. 日付の文字列フォーマット(和暦の月)
[ サンプルプログラムのソースコード1 - DateFormatSample08.java - ]
- import java.util.Calendar;
- import java.util.Formattable;
- import java.util.Formatter;
- public class DateFormatSample08 {
- public static void main(String[] args) {
- // 実行した時の月
- Calendar calendar = Calendar.getInstance();
- System.out.println(String.format("月の表示:%1$s ( %2$tB )",
- new JpMonth(calendar),calendar));
- // カレンダーオブジェクトに1月を設定
- calendar.set(Calendar.MONTH, Calendar.JANUARY);
- System.out.println(String.format("月の表示:%1$s ( %2$tB )",
- new JpMonth(calendar),calendar));
- // カレンダーオブジェクトに2月を設定
- calendar.set(Calendar.MONTH, Calendar.FEBRUARY);
- System.out.println(String.format("月の表示:%1$s ( %2$tB )",
- new JpMonth(calendar),calendar));
-
- }
-
- }
- class JpMonth implements Formattable {
-
- public Calendar calendar;
- public JpMonth() {
- this.calendar = Calendar.getInstance();
- }
- public JpMonth(Calendar calendar) {
- this.calendar = calendar;
- }
- public void formatTo(Formatter formatter,
- int flags,
- int width,
- int precision) {
-
- switch ( calendar.get(Calendar.MONTH) ) {
-
- case Calendar.JANUARY:
- formatter.format("%1$s", "睦月");
- break;
- case Calendar.FEBRUARY:
- formatter.format("%1$s", "如月");
- break;
- case Calendar.MARCH:
- formatter.format("%1$s", "弥生");
- break;
- case Calendar.APRIL:
- formatter.format("%1$s", "卯月");
- break;
- case Calendar.MAY:
- formatter.format("%1$s", "皐月");
- break;
- case Calendar.JUNE:
- formatter.format("%1$s", "水無月");
- break;
- case Calendar.JULY:
- formatter.format("%1$s", "文月");
- break;
- case Calendar.AUGUST:
- formatter.format("%1$s", "葉月");
- break;
- case Calendar.SEPTEMBER:
- formatter.format("%1$s", "長月");
- break;
- case Calendar.OCTOBER:
- formatter.format("%1$s", "神無月");
- break;
- case Calendar.NOVEMBER:
- formatter.format("%1$s", "霜月");
- break;
- case Calendar.DECEMBER:
- formatter.format("%1$s", "師走");
- break;
-
- }
-
- }
-
- }
|
[ サンプルプログラムの実行結果 ]
月の表示:卯月 ( 4月 )
月の表示:睦月 ( 1月 )
月の表示:如月 ( 2月 )
|
[ サンプルプログラムの解説 ]
インターフェースFormattableを使うことで書式設定をカスタマイズすることが出来ます。
サンプルプログラムでは、日付の月の表現を日本の昔の暦にカスタマイズしています。
書式設定をカスタマイズするクラスにFomattableクラスをimplementsして(サンプルプログラム2の7行目赤字部分)
formatToメソッド(サンプルプログラム2の19行目〜75行目まで)を実装します。どんな風にカスタマイズするのかは、formatToメソッドの中に
記述していきます。
|
|