JavaのCalendarクラスを使って、日時の変換処理をしようと調べていました。
基本的な現在時刻の取得から、指定フォーマットでの出力、タイムゾーン(UTCなど)の指定や、和暦での出力など、色々とCalendarクラスの使い方を勉強したので、この記事にまとめます。(Java8を使用)
現在時刻の取得
「Calendar.getInstance」でカレンダーのインスタンスを取得して、そのCalendarインスタンスから「getTime」メソッドを呼び出すことで、現在時刻が表示できます。
サンプルコード
//現在時刻のCalendarオブジェクトを取得 Calendar cal = Calendar.getInstance(); System.out.println("--------------------------------"); System.out.println("現在時刻"); System.out.println(cal.getTime()); System.out.println("--------------------------------");
結果
(補足)サンプル全量はこのページの最後に書きます。importするクラスなどは、そちらを参照してください。
指定のフォーマットで出力
「2018-12-30」のように、「時間-分-秒-ミリ秒」とかで出力したいときには、「SimpleDateFormat」を使うと簡単にフォーマット指定ができます。
サンプルコード
// 指定のフォーマットで出力(日付) SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); System.out.println("--------------------------------"); System.out.println("指定のフォーマットで出力(日付)"); System.out.println(sdf.format(cal.getTime())); System.out.println("--------------------------------"); // 指定のフォーマットで出力(時間) SimpleDateFormat sdf2 = new SimpleDateFormat("HH-mm-ss-SSS"); System.out.println("--------------------------------"); System.out.println("指定のフォーマットで出力(時間)"); System.out.println(sdf2.format(cal.getTime())); System.out.println("--------------------------------");
実行結果
指定のタイムゾーンで出力
世界標準時「UTC」や、「上海時間」等特定のタイムゾーンで出力したいときなどは、「SimpleDateFormat」でタイムゾーンを指定してやればOKです。
サンプルコード
//指定のタイムゾーンで現在時刻を取得 Calendar cal3 = Calendar.getInstance(); SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss-SSS"); System.out.println("--------------------------------"); System.out.println("現在時刻:JST"); System.out.println(sdf3.format(cal3.getTime())); System.out.println("現在時刻:UTC"); sdf3.setTimeZone(TimeZone.getTimeZone("UTC")); System.out.println(sdf3.format(cal3.getTime())); System.out.println("現在時刻:Asia/Shanghai"); sdf3.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); System.out.println(sdf3.format(cal3.getTime())); System.out.println("--------------------------------");
結果
和暦で表示したいとき
平成何年などで表示したいときも、「SimpleDateFormat」が大活躍。第二引数にロケールを指定してあげましょう。
サンプルコード
//和暦で表示 Calendar cal4 = Calendar.getInstance(); SimpleDateFormat sdf4 = new SimpleDateFormat("GGGGyy年MM月dd日 E曜日", new Locale("ja", "JP", "JP")); System.out.println("--------------------------------"); System.out.println("和暦で表示"); System.out.println(sdf4.format(cal4.getTime())); System.out.println("--------------------------------");
結果
ラスト!今回のサンプルコード全量
今回紹介した例を全部のせたサンプルコードです。これを貼れば動くはずなので、動作検証に使って下さい。
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Locale; import java.util.TimeZone; public class CalendarTest { public static void main(String[] args){ //現在時刻のCalendarオブジェクトを取得 Calendar cal = Calendar.getInstance(); System.out.println("--------------------------------"); System.out.println("現在時刻"); System.out.println(cal.getTime()); System.out.println("--------------------------------"); // 指定のフォーマットで出力(日付) SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); System.out.println("--------------------------------"); System.out.println("指定のフォーマットで出力(日付)"); System.out.println(sdf.format(cal.getTime())); System.out.println("--------------------------------"); // 指定のフォーマットで出力(時間) SimpleDateFormat sdf2 = new SimpleDateFormat("HH-mm-ss-SSS"); System.out.println("--------------------------------"); System.out.println("指定のフォーマットで出力(時間)"); System.out.println(sdf2.format(cal.getTime())); System.out.println("--------------------------------"); //指定のタイムゾーンで現在時刻を取得 Calendar cal3 = Calendar.getInstance(); SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss-SSS"); System.out.println("--------------------------------"); System.out.println("現在時刻:JST"); System.out.println(sdf3.format(cal3.getTime())); System.out.println("現在時刻:UTC"); sdf3.setTimeZone(TimeZone.getTimeZone("UTC")); System.out.println(sdf3.format(cal3.getTime())); System.out.println("現在時刻:Asia/Shanghai"); sdf3.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); System.out.println(sdf3.format(cal3.getTime())); System.out.println("--------------------------------"); //和暦で表示 Calendar cal4 = Calendar.getInstance(); SimpleDateFormat sdf4 = new SimpleDateFormat("GGGGyy年MM月dd日 E曜日", new Locale("ja", "JP", "JP")); System.out.println("--------------------------------"); System.out.println("和暦で表示"); System.out.println(sdf4.format(cal4.getTime())); System.out.println("--------------------------------"); } }
結果