104blog

投資が趣味なITエンジニアの雑記ブログです。

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

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

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

f:id:toyo--104:20181230005258p:plain:w300

現在時刻の取得

  • Calendar.getInstance()」でカレンダーのインスタンスを取得して、
  • そのCalendarインスタンスから「getTime」メソッドを呼び出すことで、現在時刻が表示できます。

サンプルコード

  • ちなみに、サンプル全量はこのページの最後に書きます。importするクラスなどは、そちらを参照してください。
//現在時刻のCalendarオブジェクトを取得
Calendar cal = Calendar.getInstance();
System.out.println("--------------------------------");
System.out.println("現在時刻");
System.out.println(cal.getTime());
System.out.println("--------------------------------");

結果

f:id:toyo--104:20181230005557p:plain:w350

指定のフォーマットで出力

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

結果

f:id:toyo--104:20181230005844p:plain:w350

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

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

結果

f:id:toyo--104:20181230010225p:plain:w350

和暦で表示したいとき

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

結果

f:id:toyo--104:20181230010415p:plain:w350

最後に、今回のサンプルコード全量

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

サンプルコード全量

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

結果

f:id:toyo--104:20181230010632p:plain:w420