Java 日付と時刻

Java には複数の日付時刻 API が用意されています。以下は主要なカテゴリの比較と一般的なメソッドのまとめです。

カテゴリ 主要クラス スレッドセーフ 可変性 Java バージョン 特徴
従来の日付 Date, Calendar,GregorianCalendar 否 可変 1.0+ 設計上の欠陥が多く、推奨されません
新しい日付時刻 LocalDate, LocalTime, LocalDateTime, ZonedDateTime, ChronoUnit である 不変 8+ 設計が良好で、推奨されます
タイムスタンプ Instant である 不変 8+ マシン時間で、ナノ秒まで正確
フォーマット DateTimeFormatter である 不変 8+ スレッドセーフなフォーマットクラス

LocalDate/DateTimeFormatter

LocalDate/DateTimeFormatter は Java 8 で導入された日付クラスです。LocalDate は時刻を含まない日付(年-月-日)を表すために使用され、DateTimeFormatter は日付時刻オブジェクトのフォーマットと解析に使用されます。

例

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class サンプルTest {
    public static void main(String[] args) {
        // 現在の日付を取得
        LocalDate today = LocalDate.now();
        System.out.println(現在の日付: + today);
       
        // 特定の日付を作成
        LocalDate nationalDay = LocalDate.of(2025, 10, 1);
        System.out.println("国慶節: " + nationalDay);
       
        // 日付の加算と減算
        LocalDate tomorrow = today.plusDays(1);
        LocalDate nextMonth = today.plusMonths(1);
        LocalDate lastYear = today.minusYears(1);
       
        System.out.println("明日: " + tomorrow);
        System.out.println("来月: " + nextMonth);
        System.out.println("去年の今日: " + lastYear);
    }
}

上記の例の出力結果は次のとおりです。

当前日期: 2025-05-01
国庆节: 2025-10-01
明天: 2025-05-02
下个月: 2025-06-01
去年今天: 2024-05-01
  1. 新しいプロジェクトでは java.time パッケージを優先的に使用します (Java 8+)

  2. 古い Date クラスと Calendar クラスの使用は避けます

  3. タイムゾーンの使用を明確に区別します:

    • タイムゾーン不要:LocalDate/LocalTime/LocalDateTime

    • タイムゾーン必要:ZonedDateTime

  4. フォーマット時はスレッドセーフを考慮します:SimpleDateFormat ではなく DateTimeFormatter を使用

  5. データベース連携:

    • JDBC 4.2+ は java.time タイプを直接サポート

    • 旧バージョンでは java.sql.Date/Timestamp に変換可能

1. LocalDate (日付)

例

LocalDate today = LocalDate.now();
LocalDate date = LocalDate.of(2023, Month.JUNE, 15);
int year = date.getYear();  // 2023
Month month = date.getMonth();  // JUNE
int day = date.getDayOfMonth();  // 15
LocalDate nextWeek = today.plusWeeks(1);
boolean isLeap = date.isLeapYear();  // うるう年かどうか

2. LocalTime (時刻)

例

LocalTime now = LocalTime.now();
LocalTime time = LocalTime.of(14, 30, 45);  // 14:30:45
int hour = time.getHour();  // 14
int minute = time.getMinute();  // 30
LocalTime nextHour = time.plusHours(1);

3. LocalDateTime (日付時刻)

例

LocalDateTime ldt = LocalDateTime.now();
LocalDateTime dt = LocalDateTime.of(2023, 6, 15, 14, 30);
LocalDateTime nextMonth = dt.plusMonths(1);

4. ZonedDateTime (タイムゾーン付き日付時刻)

例

ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));
ZonedDateTime nyTime = zdt.withZoneSameInstant(ZoneId.of("America/New_York"));
ZoneId zone = zdt.getZone();  // タイムゾーンを取得

5. Instant (タイムスタンプ)

例

Instant now = Instant.now();  // 現在のタイムスタンプを取得
Instant later = now.plusSeconds(60);  // 60秒後
long epochMilli = now.toEpochMilli();  // ミリ秒のタイムスタンプを取得

Date クラス

java.util パッケージは、現在の日付と時刻をカプセル化する Date クラスを提供します。Date クラスは、Date オブジェクトをインスタンス化するための 2 つのコンストラクタを提供します。

最初のコンストラクタは、現在の日付と時刻を使用してオブジェクトを初期化します。

Date( )

2 番目のコンストラクタは、1970 年 1 月 1 日からのミリ秒数であるパラメータを 1 つ受け取ります。

Date(long millisec)

Date オブジェクトを作成した後、以下のメソッドを呼び出すことができます。

番号 メソッドと説明
1 boolean after(Date date)
このメソッドを呼び出す Date オブジェクトが指定された日付より後にある場合に true を返し、それ以外の場合は false を返します。
2 boolean before(Date date)
このメソッドを呼び出す Date オブジェクトが指定された日付より前にある場合に true を返し、それ以外の場合は false を返します。
3 Object clone( )
このオブジェクトのコピーを返します。
4 int compareTo(Date date)
このメソッドを呼び出す Date オブジェクトと指定された日付を比較します。両者が等しい場合は 0 を返します。呼び出しオブジェクトが指定された日付より前の場合は負の数を返し、後の場合は正の数を返します。
5 int compareTo(Object obj)
obj が Date 型の場合、操作は compareTo(Date) と同じです。それ以外の場合は ClassCastException をスローします。
6 boolean equals(Object date)
このメソッドを呼び出す Date オブジェクトと指定された日付が等しい場合は true を返し、それ以外の場合は false を返します。
7 long getTime( )
1970 年 1 月 1 日 00:00:00 GMT 以降の、この Date オブジェクトが表すミリ秒数を返します。
8 int hashCode( )
このオブジェクトのハッシュコード値を返します。
9 void setTime(long time)
 
1970 年 1 月 1 日 00:00:00 GMT から time ミリ秒後の時刻と日付を設定します。
10 String toString( )
この Date オブジェクトを次の形式の String に変換します:dow mon dd hh:mm:ss zzz yyyy ここで、dow は曜日 (Sun, Mon, Tue, Wed, Thu, Fri, Sat) です。

現在の日付時刻を取得

Java で現在の日付と時刻を取得するのは簡単です。Date オブジェクトの toString() メソッドを使用して現在の日付と時刻を出力します。次のようになります:

例

import java.util.Date; public class DateDemo { public static void main(String[] args) { //Date オブジェクトを初期化 Date date = new Date(); //toString() 関数を使用して日付時刻を表示 System.out.println(date.toString()); } }

上記の例をコンパイルして実行した結果は次のとおりです:

Mon May 04 09:51:52 CDT 2013

日付の比較

Java では、2 つの日付を比較するために次の 3 つのメソッドを使用します:

  • getTime() メソッドを使用して 2 つの日付の値を取得し(1970 年 1 月 1 日からの経過ミリ秒数)、その後 2 つの値を比較します。
  • before()、after() および equals() メソッドを使用します。たとえば、月の 12 日は 18 日より早いので、new Date(99, 2, 12).before(new Date (99, 2, 18))true を返します。
  • compareTo() メソッドを使用します。これは Comparable インターフェースで定義されており、Date クラスはこのインターフェースを実装しています。

1. getTime() メソッドを使用した比較

この方法では、日付オブジェクトが 1970 年 1 月 1 日(Unix エポック)からの経過ミリ秒数を比較します。

例

import java.util.Date;

public class DateComparison {
    public static void main(String[] args) {
        Date date1 = new Date(121, 5, 15); // 2021年6月15日
        Date date2 = new Date(121, 5, 20); // 2021年6月20日
       
        // ミリ秒を比較
        if (date1.getTime() < date2.getTime()) {
            System.out.println("date1 は date2 より前");
        } else if (date1.getTime() > date2.getTime()) {
            System.out.println("date1 は date2 より後");
        } else {
            System.out.println("2 つの日付は同じ");
        }
    }
}

出力:

date1 在 date2 之前

2. before(), after() および equals() メソッドの使用

これらのメソッドは Date クラスに組み込まれた比較メソッドであり、意味がより明確です。

例

import java.util.Date;

public class DateComparison {
    public static void main(String[] args) {
        Date date1 = new Date(121, 5, 15); // 2021年6月15日
        Date date2 = new Date(121, 5, 20); // 2021年6月20日
       
        // before() メソッドを使用
        System.out.println("date1 は date2 より前ですか? " + date1.before(date2));
       
        // after() メソッドを使用
        System.out.println("date1 は date2 より後ですか? " + date1.after(date2));
       
        // equals() メソッドを使用
        System.out.println("2 つの日付は同じですか? " + date1.equals(date2));
    }
}

出力:

date1 在 date2 之前吗? true
date1 在 date2 之后吗? false
两个日期相同吗? false

3. compareTo() メソッドの使用

Date クラスは Comparable インターフェースを実装しており、compareTo() メソッドを使用して比較できます。

例

import java.util.Date;

public class DateComparison {
    public static void main(String[] args) {
        Date date1 = new Date(121, 5, 15); // 2021年6月15日
        Date date2 = new Date(121, 5, 20); // 2021年6月20日
       
        int result = date1.compareTo(date2);
       
        if (result < 0) {
            System.out.println("date1 は date2 より前");
        } else if (result > 0) {
            System.out.println("date1 は date2 より後");
        } else {
            System.out.println("2つの日付は同じ");
        }
    }
}

出力:

date1 在 date2 之前

SimpleDateFormat を使用した日付のフォーマット

SimpleDateFormat は、ロケールに依存する方法で日付をフォーマットおよび解析するクラスです。SimpleDateFormat を使用すると、任意のユーザー定義の日時形式を選択できます。例:

例

import java.util.*; import java.text.*; public class DateDemo { public static void main(String[] args) { Date dNow = new Date( ); SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss"); System.out.println("現在の時刻は:" + ft.format(dNow)); } }

SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");

このコード行は変換の形式を定義しています。ここで、yyyy は西暦の年、MM は月、dd は日、HH:mm:ss は時、分、秒です。

注意:大文字の形式もあれば小文字の形式もあります。例えば、MM は月、mm は分、HH は24時間制、hh は12時間制です。

上記の例をコンパイルして実行した結果は次のとおりです:

当前时间为: 2018-09-06 10:16:34

日付と時刻のフォーマットコード

時間パターン文字列は、時刻形式を指定するために使用されます。このパターンでは、すべてのASCII文字がパターン文字として予約されており、次のように定義されています:

文字 説明 例
G 紀元マーカー AD
y 4桁の年 2001
M 月 July or 07
d 月の日 10
h A.M./P.M. (1~12) 形式の時 12
H 1日の時間 (0~23) 22
m 分 30
s 秒 55
S ミリ秒 234
E 曜日 Tuesday
D 年の日 360
F 月の何週目の曜日 2 (second Wed. in July)
w 年の週 40
W 月の週 1
a A.M./P.M. マーカー PM
k 1日の時間 (1~24) 24
K A.M./P.M. (0~11) 形式の時 10
z タイムゾーン Eastern Standard Time
' 文字区切り文字 Delimiter
" 一重引用符 `

printfを使用した日付のフォーマット

printf メソッドは、時刻と日付を簡単にフォーマットできます。2文字の形式を使用し、それは%tで始まり、次の表のいずれかの文字で終わります。

  • %tY:4桁の年を出力します。例:2023
  • %ty:2桁の年を出力します。例:23
  • %tm:2桁の月を出力します。例:02
  • %tB:月のフルネームを出力します。例:February
  • %tb:月の省略名を出力します。例:Feb
  • %tA:曜日のフルネームを出力します。例:Wednesday
  • %ta:曜日の省略名を出力します。例:Wed
  • %td:2桁の日を出力します。例:24
  • %te:1桁または2桁の日を出力します。例:24 または 02
  • %tH:24時間制の時を出力します。例:23
  • %tI:12時間制の時を出力します。例:11
  • %tM:分を出力します。例:45
  • %tS:秒を出力します。例:30
  • %tp:午前か午後かを出力します。例:AM または PM
  • %tZ:タイムゾーンを出力します。例:GMT+08:00

変換文字

説明

例

%tc

すべての日付と時刻情報を含む

土曜日 10月 27 14:21:20 CST 2007

%tF

「年-月-日」形式

2007-10-27

%tD

"月/日/年"形式

10/27/07

%tr

「HH:MM:SS PM」形式(12時間制)

02:25:51 午後

%tT

「HH:MM:SS」形式(24時間制)

14:28:16

%tR

「HH:MM」形式(24時間制)

14:28

詳細printf解析については以下を参照してください:Java フォーマット出力 printf の例

例

例

import java.util.Date;
public class DateFormatExample {
   public static void main(String[] args) {
      Date date = new Date();
      System.out.printf("%tY-%tm-%td %tH:%tM:%tS %tZ", date, date, date, date, date, date, date);
   }
}

実行出力結果は次のとおりです:

2023-02-24 13:34:45 GMT+08:00

例

import java.util.Date; public class DateDemo { public static void main(String[] args) { //Date オブジェクトの初期化 Date date = new Date(); //cの使用 System.out.printf("すべての日付と時刻情報:%tc%n",date); //fの使用 System.out.printf("年-月-日形式:%tF%n",date); //dの使用 System.out.printf("月/日/年形式:%tD%n",date); //rの使用 System.out.printf("HH:MM:SS PM形式(12時間制):%tr%n",date); //tの使用 System.out.printf("HH:MM:SS形式(24時間制):%tT%n",date); //Rの使用 System.out.printf("HH:MM形式(24時間制):%tR",date); } }

上記の例をコンパイルして実行した結果は次のとおりです:

全部日期和时间信息:星期一 九月 10 10:43:36 CST 2012  
年-月-日格式:2012-09-10  
月/日/年格式:09/10/12  
HH:MM:SS PM格式(12时制):10:43:36 上午  
HH:MM:SS格式(24时制):10:43:36  
HH:MM格式(24时制):10:43  

日付を繰り返し指定する必要がある場合、この方法で各部分をフォーマットするのは少し複雑です。そのため、フォーマットされる引数のインデックスを指定するフォーマット文字列を使用できます。

インデックスは、直後に置く必要があります%の後に置き、さらに$で終わる必要があります。例:

例

import java.util.Date; public class DateDemo { public static void main(String[] args) { //Date オブジェクトの初期化 Date date = new Date(); //toString()を使用して日付と時刻を表示する System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date); } }

上記の例をコンパイルして実行した結果は次のとおりです:

Due date: February 09, 2014

または、< フラグを使用できます。これは、以前にフォーマットされた引数が再び使用されることを示します。例:

例

import java.util.Date; public class DateDemo { public static void main(String[] args) { //Date オブジェクトの初期化 Date date = new Date(); //フォーマットされた時刻を表示 System.out.printf("%s %tB %<te, %<tY", "Due date:", date); } }

上記の例をコンパイルして実行した結果は次のとおりです:

Due date: February 09, 2014

日付形式を定義する変換文字を使用すると、日付は指定された変換文字によって新しい文字列を生成できます。これらの日付変換文字は次のとおりです:

例

import java.util.*; public class DateDemo { public static void main(String[] args) { Date date=new Date(); //bの使用、月の省略名 String str=String.format(Locale.US,"英語の月の省略名:%tb",date); System.out.println(str); System.out.printf("ローカルの月の省略名:%tb%n",date); //Bの使用、月のフルネーム str=String.format(Locale.US,"英語の月のフルネーム:%tB",date); System.out.println(str); System.out.printf("ローカルの月のフルネーム:%tB%n",date); //aの使用、曜日の省略名 str=String.format(Locale.US,"英語の曜日の省略名:%ta",date); System.out.println(str); //Aの使用、曜日のフルネーム System.out.printf("ローカルの曜日の省略名:%tA%n",date); //Cの使用、年の最初の2桁 System.out.printf("年の最初の2桁(2桁に満たない場合は先頭に0を付ける):%tC%n",date); //yの使用、年の最後の2桁 System.out.printf("年の最後の2桁(2桁に満たない場合は先頭に0を付ける):%ty%n",date); //jの使用、年の日数 System.out.printf("1年の日数(つまり年の第何日目):%tj%n",date); //mの使用、月 System.out.printf("2桁の月(2桁に満たない場合は先頭に0を付ける):%tm%n",date); //dの使用、日(2桁、不足はゼロ埋め) System.out.printf("2桁の日(2桁に満たない場合は先頭に0を付ける):%td%n",date); //eの使用、日(1桁、ゼロ埋めしない) System.out.printf("月の日(先頭に0を付けない):%te",date); } }

出力結果は次のとおりです:

英文月份简称:May
本地月份简称:五月
英文月份全称:May
本地月份全称:五月
英文星期的简称:Thu
本地星期的简称:星期四
年的前两位数字(不足两位前面补0):20
年的后两位数字(不足两位前面补0):17
一年中的天数(即年的第几天):124
两位数字的月份(不足两位前面补0):05
两位数字的日(不足两位前面补0):04
月份的日(前面不补0):4

文字列を時刻に解析

SimpleDateFormat クラスにはいくつかの追加メソッドがあります。特に parse() は、指定された SimpleDateFormat オブジェクトに格納されたフォーマットに従って文字列を解析しようとします。例:

例

import java.util.*; import java.text.*; public class DateDemo { public static void main(String[] args) { SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd"); String input = args.length == 0 ? "1818-11-11" : args[0]; System.out.print(input + " Parses as "); Date t; try { t = ft.parse(input); System.out.println(t); } catch (ParseException e) { System.out.println("Unparseable using " + ft); } } }

上記の例をコンパイルして実行した結果は次のとおりです:

$ java DateDemo
1818-11-11 Parses as Wed Nov 11 00:00:00 GMT 1818
$ java DateDemo 2007-12-01
2007-12-01 Parses as Sat Dec 01 00:00:00 GMT 2007

Java スリープ(sleep)

sleep() は現在のスレッドを停止状態(現在のスレッドをブロック)にし、CPUの使用を譲ります。目的は、現在のスレッドがプロセスが取得したCPUリソースを独占しないようにし、他のスレッドに実行の機会を残すことです。

プログラムを1ミリ秒間スリープさせたり、コンピュータの寿命と同じくらい長い任意の時間スリープさせることができます。例えば、次のプログラムは3秒間スリープします:

例

import java.util.*; public class SleepDemo { public static void main(String[] args) { try { System.out.println(new Date( ) + "\n"); Thread.sleep(1000*3); //3秒間スリープ System.out.println(new Date( ) + "\n"); } catch (Exception e) { System.out.println("Got an exception!"); } } }

上記の例をコンパイルして実行した結果は次のとおりです:

Thu Sep 17 10:20:30 CST 2015

Thu Sep 17 10:20:33 CST 2015

時間の計測

次の例は、時間間隔(ミリ秒単位)を測定する方法を示しています:

例

import java.util.*; public class DiffDemo { public static void main(String[] args) { try { long start = System.currentTimeMillis( ); System.out.println(new Date( ) + "\n"); Thread.sleep(5*60*10); System.out.println(new Date( ) + "\n"); long end = System.currentTimeMillis( ); long diff = end - start; System.out.println("Difference is : " + diff); } catch (Exception e) { System.out.println("Got an exception!"); } } }

上記の例をコンパイルして実行した結果は次のとおりです:

Fri Jan 08 09:48:47 CST 2016

Fri Jan 08 09:48:50 CST 2016

Difference is : 3019

Calendar クラス

これで日付オブジェクトをフォーマットして作成できるようになりました。しかし、時、日、分などの日付データの特定の部分を設定および取得するにはどうすればよいでしょうか?また、日付のこれらの部分に値を加算または減算するにはどうすればよいでしょうか?答えは Calendar クラスを使用することです。

Calendarクラスの機能はDateクラスよりもはるかに強力で、実装方式もDateクラスよりも複雑です。

Calendarクラスは抽象クラスであり、実際に使用する際には特定のサブクラスのオブジェクトを生成する必要があります。オブジェクトの作成プロセスはプログラマーにとって透過のであるため、getInstanceメソッドを使用して作成するだけで済みます。

システムの現在日付を表す Calendar オブジェクトを作成

Calendar c = Calendar.getInstance();//默认是当前日期

指定した日付の Calendar オブジェクトを作成

Calendarクラスを使用して特定の時間を表すには、まずCalendarオブジェクトを作成し、その後そのオブジェクトの年月日パラメータを設定する必要があります。

//创建一个代表2009年6月12日的Calendar对象
Calendar c1 = Calendar.getInstance();
c1.set(2009, 6 - 1, 12);

Calendar クラスオブジェクトのフィールド型

Calendarクラスでは以下の定数を使用して異なる意味を表します。JDK内の多くのクラスは実際にこの考え方を採用しています。

定数説明
Calendar.YEAR年
Calendar.MONTH月
Calendar.DATE日
Calendar.DAY_OF_MONTH日付。上記のフィールドと意味は完全に同じです
Calendar.HOUR12時間制の時
Calendar.HOUR_OF_DAY24時間制の時
Calendar.MINUTE分
Calendar.SECOND秒
Calendar.DAY_OF_WEEK曜日

Calendar クラスオブジェクト情報の設定

Set設定

例:

Calendar c1 = Calendar.getInstance();

呼び出し:

public final void set(int year,int month,int date)
c1.set(2009, 6, 12);//把Calendar对象c1的年月日分别设这为:2009、6、12

フィールド型を利用した設定

特定のフィールド(例えば日付の値)だけを設定する場合は、次のようなsetメソッドを使用できます:

public void set(int field,int value)

c1オブジェクトが表す日付を10日に設定します。他のすべての数値は再計算されます

c1.set(Calendar.DATE,10);

c1オブジェクトが表す年を2008年に設定します。他のすべての数値は再計算されます

c1.set(Calendar.YEAR,2008);

他のフィールド属性のsetの意味もこれに準じます

Add設定

Calendar c1 = Calendar.getInstance();

c1オブジェクトの日付に10を加えます。つまりc1は10日後の日付を表すことになり、他のすべての数値は再計算されます

c1.add(Calendar.DATE, 10);

c1オブジェクトの日付から10を引きます。つまりc1は10日前の日付を表すことになり、他のすべての数値は再計算されます

c1.add(Calendar.DATE, -10);

他のフィールド属性のaddの意味もこれに準じます

Calendar クラスオブジェクト情報の取得

Calendar c1 = Calendar.getInstance(); //年を取得 int year = c1.get(Calendar.YEAR); //月を取得 int month = c1.get(Calendar.MONTH) + 1; //日付を取得 int date = c1.get(Calendar.DATE); //時を取得 int hour = c1.get(Calendar.HOUR_OF_DAY); //分を取得 int minute = c1.get(Calendar.MINUTE); //秒を取得 int second = c1.get(Calendar.SECOND); //曜日を取得(注意:これはDateクラスとは異なります。1は日曜日、2は月曜日、3は火曜日を表し、以下同様です) int day = c1.get(Calendar.DAY_OF_WEEK);

GregorianCalendar クラス

Calendarクラスはグレゴリオ暦を実装しており、GregorianCalendarはCalendarクラスの具体的な実装の1つです。

CalendarのgetInstance()メソッドは、デフォルトで現在のロケールとタイムゾーンで初期化されたGregorianCalendarオブジェクトを返します。GregorianCalendarはADとBCという2つのフィールドを定義しています。これはグレゴリオ暦で定義された2つの時代を表します。

以下にGregorianCalendarオブジェクトのいくつかのコンストラクタメソッドを示します:

番号 コンストラクタと説明
1 GregorianCalendar()
デフォルトのロケールを持つデフォルトのタイムゾーンで、現在の時間を使用してデフォルトのGregorianCalendarを構築します。
2 GregorianCalendar(int year, int month, int date)
デフォルトのロケールを持つデフォルトのタイムゾーンで、指定された日付設定を持つGregorianCalendarを構築します
3 GregorianCalendar(int year, int month, int date, int hour, int minute)
デフォルトのロケールを持つデフォルトのタイムゾーン向けに、指定された日付と時刻の設定を持つGregorianCalendarを構築します。
4 GregorianCalendar(int year, int month, int date, int hour, int minute, int second)
デフォルトのロケールを持つデフォルトのタイムゾーン向けに、指定された日付と時刻の設定を持つGregorianCalendarを構築します。
5 GregorianCalendar(Locale aLocale)
指定されたロケールを持つデフォルトのタイムゾーンで、現在の時間に基づくGregorianCalendarを構築します。
6 GregorianCalendar(TimeZone zone)
デフォルトのロケールを持つ指定されたタイムゾーンで、現在の時間に基づくGregorianCalendarを構築します。
7 GregorianCalendar(TimeZone zone, Locale aLocale)
指定されたロケールを持つ指定されたタイムゾーンで、現在の時間に基づくGregorianCalendarを構築します。

ここにGregorianCalendarクラスが提供するいくつかの便利なメソッドのリストを示します:

番号 メソッドと説明
1 void add(int field, int amount)
カレンダーの規則に従って、指定された(符号付きの)時間量を指定されたカレンダーフィールドに追加します。
2 protected void computeFields()
UTCミリ秒値を時間フィールド値に変換します
3 protected void computeTime()
Calendarをオーバーライドし、時間フィールド値をUTCミリ秒値に変換します
4 boolean equals(Object obj)
このGregorianCalendarを指定されたObjectと比較します。
5 int get(int field)
指定されたフィールドの時間値を取得します
6 int getActualMaximum(int field)
現在の日付における、指定されたフィールドの最大値を返します
7 int getActualMinimum(int field)
現在の日付における、指定されたフィールドの最小値を返します
8 int getGreatestMinimum(int field)
このGregorianCalendarインスタンスの指定されたカレンダーフィールドの最高の最小値を返します。
9 Date getGregorianChange()
グレゴリオ暦の変更日を取得します。
10 int getLeastMaximum(int field)
このGregorianCalendarインスタンスの指定されたカレンダーフィールドの最低の最大値を返します
11 int getMaximum(int field)
このGregorianCalendarインスタンスの指定されたカレンダーフィールドの最大値を返します。
12 Date getTime()
カレンダーの現在時刻を取得します。
13 long getTimeInMillis()
長整数型で表されるカレンダーの現在時刻を取得します
14 TimeZone getTimeZone()
タイムゾーンを取得します。
15 int getMinimum(int field)
指定されたフィールドの最小値を返します。
16 int hashCode()
hashCodeをオーバーライドします。
17 boolean isLeapYear(int year)
指定された年がうるう年かどうかを判定します。
18 void roll(int field, boolean up)
指定された時間フィールドに単一の時間単位を追加または減算(上/下)し、より大きなフィールドは変更しません。
19 void set(int field, int value)
指定された値で時間フィールドを設定します。
20 void set(int year, int month, int date)
年、月、日の値を設定します。
21 void set(int year, int month, int date, int hour, int minute)
年、月、日、時、分の値を設定します。
22 void set(int year, int month, int date, int hour, int minute, int second)
年、月、日、時、分、秒の値を設定します。
23 void setGregorianChange(Date date)
GregorianCalendarの変更日を設定します。
24 void setTime(Date date)
指定された日付でCalendarの現在時刻を設定します。
25 void setTimeInMillis(long millis)
指定されたlong型のミリ秒数でCalendarの現在時刻を設定します。
26 void setTimeZone(TimeZone value)
指定されたタイムゾーン値で現在のタイムゾーンを設定します。
27 String toString()
カレンダーを表す文字列を返します。

例

例

import java.util.*; public class GregorianCalendarDemo { public static void main(String[] args) { String months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; int year; //Gregorianカレンダーの初期化 //現在の時刻と日付を使用 //デフォルトはローカル時間とタイムゾーン GregorianCalendar gcalendar = new GregorianCalendar(); //現在の時刻と日付の情報を表示 System.out.print("Date: "); System.out.print(months[gcalendar.get(Calendar.MONTH)]); System.out.print(" " + gcalendar.get(Calendar.DATE) + " "); System.out.println(year = gcalendar.get(Calendar.YEAR)); System.out.print("Time: "); System.out.print(gcalendar.get(Calendar.HOUR) + ":"); System.out.print(gcalendar.get(Calendar.MINUTE) + ":"); System.out.println(gcalendar.get(Calendar.SECOND)); //現在の年がうるう年かどうかをテスト if(gcalendar.isLeapYear(year)) { System.out.println("現在の年はうるう年です"); } else { System.out.println("現在の年はうるう年ではありません"); } } }

上記のサンプルをコンパイルして実行した結果は次のとおりです:

Date: Apr 22 2009
Time: 11:25:27
当前年份不是闰年

Calendarクラスの完全なリストについては、標準のJavaドキュメント。

その他の拡張