【java】日付や時刻の「形式、フォーマット」を変更する「SimpleDateFormat」クラス

スポンサーリンク

日付や時刻にも様々な表現方法がある

単純に日付を表現するにも、「何年何月何日」というシンプルな形式のものだったり、「何月何日何曜日の何時何分何秒何ミリ」といって細部に至るまでの情報が必要な場合がある。

Dateクラスで日付や時刻の情報を取得してきただけでは、好みの形式で時刻を扱うことはできない。

よって、取得してきた時刻を自分の好み通りのオリジナルの表現形式を作成するのがSimpleDateFormatクラスなのである。

SimpleDateFormatの具体的な使用方法

ここでは、誰もが使用するような代表的な例をいくつか挙げておく。

(西暦)yyyy/MM/dd

import java.util.*;
import java.text.*;

class Format {
public static void main(String[] args) {
Date da = new Date();

//SimpleDateFormatを使用して日付の型を作成→(a)
SimpleDateFormat da_form = new SimpleDateFormat("yyyy'/'MM'/'dd");

//(a)で作成したSimpleDateFormatの型を使用して、変数daの値を表現する
System.out.println(da_form.format(da));
}
}

出力結果:
2017/02/27

(西暦)yyyy年MM月DD日(E曜日)

import java.util.*;
import java.text.*;

class Format {
public static void main(String[] args) {
Date da = new Date();

//SimpleDateFormatを使用して日付の型を作成→(a)
SimpleDateFormat da_form = new SimpleDateFormat("yyyy'年'MM'月'dd'日('E')'");

//(a)で作成したSimpleDateFormatの型を使用して、変数daの値を表現する
System.out.println(da_form.format(da));
}
}

出力結果:
2017年02月27日(月)

(西暦)yyyy年MM月dd日kk時mm分ss秒SSミリ

import java.util.*;
import java.text.*;

class Format {
public static void main(String[] args) {
Date da = new Date();

//SimpleDateFormatを使用して日付の型を作成→(a)
SimpleDateFormat da_form = new SimpleDateFormat("yyyy'年'MM'月'dd'日'kk'時'mm'分'ss'秒'SS'ミリ'");

//(a)で作成したSimpleDateFormatの型を使用して、変数daの値を表現する
System.out.println(da_form.format(da));
}
}

出力結果:
2017年02月27日22時29分12秒766ミリ

(和暦)年/月/日/(曜日)

import java.util.*;
import java.text.*;

class Format {
public static void main(String[] args) {
//ロケールの指定(日本語ロケールの取得)
Locale locale = new Locale("ja", "JP", "JP");

//calendarの時刻取得をロケール("ja", "JP", "JP")で行う。
Calendar calendar = Calendar.getInstance(locale);

//日本語ロケールの取得でフォーマットを作成する。
DateFormat jpFormat = new SimpleDateFormat("Gy年M月d日",locale);

//「日本語ロケールの時刻」を「日本語ロケールのフォーマット」に流し込み、dateStrに格納
String dateStr = jpFormat.format(calendar.getTime());

//和暦時刻を画面出力
System.out.println("和暦:" + dateStr);
}
}

出力結果:
和暦:H29年2月28日

和暦取得についての解説

和暦を表現する場合は今でより多少複雑になる。

和暦というのは日本固有の時間単位であるため、単純にDateクラスから時刻を取得してきただけでは実現できない。

では、どうやって日本固有の時間単位を取得するか、というと「Calendar」クラスを使用する。

【Calendarクラスより現在時刻を取得する】
Calendar rightNow = Calendar.getInstance();

しかし、上記のままでは日本固有の時間単位は取得できない。

引数にロケールを指定することによって取得することができる。
Calendar rightNow = Calendar.getInstance(ここにロケールを記載);

(ロケールとは、国ごとに定められた単位のこと。
今回の場合だと和暦のこと。
他にも日本だと「1寸・1尺・1間」などがそれに該当する。)

java_apiによると、

Locale コンストラクタが引数 "ja", "JP", "JP" で呼び出されると、拡張「u-ca-japanese」が自動的に追加されます。
とのことである。
つまりは、 Calendar rightNow = Calendar.getInstance("ja", "JP", "JP") で呼び出してやれば良い、ということになる。
また、SimpleDateFormatでも日本語ロケールとして処理しなくてはいけなので、第二引数にlocaleを指定する。

DateFormat jpFormat = new SimpleDateFormat("Gy年M月d日",locale);
上記のように記載する。

一度定義したフォーマットを変更する場合 フォーマット形式を変更する

applyPatternを使用する。

import java.util.*;
import java.text.*;

class Format {
public static void main(String[] args) {
Date da = new Date();

//SimpleDateFormatを使用して日付の型を作成→(a)
SimpleDateFormat da_form = new SimpleDateFormat("yyyy'年'MM'月'dd'日'");

//(a)で作成したSimpleDateFormatの型を使用して、変数daの値を表現する
System.out.println("変更前の値は:" + da_form.format(da));

//(a)のフォーマット形式を変更するには、applyPatternを使用する
da_form.applyPattern("yyyy/MM/dd");

//再度(a)を表示。形式が変更されていることを確認
System.out.println("変更後の値は:" + da_form.format(da));

}
}

出力結果:
変更前の値は:2017年02月27日
変更後の値は:2017/02/27