まめぞうの技術メモ

IT関連で勉強したことをメモします

JavaのCalendarを使って現在時刻取得、フォーマット指定、タイムゾーン指定、和暦出力をする方法

JavaのCalendarクラスを使って、日時の変換処理をしようと調べていました。

基本的な現在時刻の取得から、指定フォーマットでの出力、タイムゾーン(UTCなど)の指定や、和暦での出力など、色々とCalendarクラスの使い方を勉強したので、この記事にまとめます。(Java8を使用)

javaでカレンダーを使う
javaでカレンダーを使う

現在時刻の取得

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("--------------------------------");

実行結果

実行結果その2

指定のタイムゾーンで出力

世界標準時「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("--------------------------------");

結果

実行結果その3

和暦で表示したいとき

平成何年などで表示したいときも、「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("--------------------------------");

結果

実行結果その4

ラスト!今回のサンプルコード全量

今回紹介した例を全部のせたサンプルコードです。これを貼れば動くはずなので、動作検証に使って下さい。

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("--------------------------------");
    }
}

結果

実行結果その5