Javaの日付時刻


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

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

Date( )

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

Date(long millisec)

Date オブジェクトが作成されたら、次のメソッドを呼び出すことができます。

シリアル番号 方法と説明
1後ブール値(日付日付)
このメソッドを呼び出す Date オブジェクトが指定された日付より後の場合は true を返し、それ以外の場合は false を返します。
2ブール値前(日付日付)
このメソッドを呼び出す Date オブジェクトが、指定された日付より前に true を返す場合は、それ以外の場合は false を返します。
3オブジェクトクローン( )
このオブジェクトのコピーを返します。
4int CompareTo(日付日付)
このメソッドが呼び出されたときに、Date オブジェクトと指定された日付を比較します。両者が等しい場合は 0 が返されます。呼び出し元のオブジェクトが指定された日付より前の場合は、負の数が返されます。呼び出し元のオブジェクトは、指定された日付の後に正の数値を返します。
5int CompareTo(オブジェクトobj)
obj が Date 型の場合、この操作は CompareTo(Date) と同等です。それ以外の場合は、ClassCastException がスローされます。
6ブール値に等しい(オブジェクトの日付)
このメソッドを呼び出す Date オブジェクトが指定された日付と等しい場合は true を返し、それ以外の場合は false を返します。
7long getTime( )
1970 年 1 月 1 日 00:00:00 GMT 以降、この Date オブジェクトによって表されるミリ秒数を返します。
8int hashCode( )
このオブジェクトのハッシュ コード値を返します。
9void setTime(長時間)

1970 年 1 月 1 日 00:00:00 GMT からの時刻と日付をミリ秒単位で設定します。
10文字列 toString( )
Date オブジェクトを String 表現に変換し、その文字列を返します。

現在の日付と時刻を取得する

以下に示すように、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());
   }
}
日付比較

Java は次の 3 つのメソッドを使用して 2 つの日付を比較します:


getTime() メソッドを使用して 2 つの日付 (1970 年 1 月 1 日からのミリ秒数) を取得し、2 つの値を比較します。

  • before()、after()、equals() メソッドを使用します。たとえば、月の 12 日が 18 日より前の場合、 new Date(99, 2, 12).before(new Date (99, 2, 18)) は true を返します。

  • Comparable インターフェイスによって定義されている CompareTo() メソッドを使用します。Date クラスはこのインターフェイスを実装します。

  • SimpleDateFormat を使用して日付を書式設定する

  • SimpleDateFormat は、ロケールに依存した方法で日付を書式設定および解析するクラスです。 SimpleDateFormat を使用すると、実行に使用するユーザー定義の日付と時刻の形式を選択できます。例:
Mon May 04 09:51:52 CDT 2013

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

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

public class DateDemo {
   public static void main(String args[]) {

      Date dNow = new Date( );
      SimpleDateFormat ft = 
      new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");

      System.out.println("Current Date: " + ft.format(dNow));
   }
}
単純な DateFormat 形式のエンコード

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

手紙説明
G エポックマーク AD
y 4 桁の年 2001
7月または07
d 月の日付 10
h 午前/午後 (1 ~ 12) の形式の時間 12
H その日の時間 (0~23) 22
m 分数 30
s 秒数 55
S ミリ秒数 234
E 曜日 火曜日
D 一年の日々 360
F 毎月の曜日 2日(7月第2水曜日)
w 年間の週 40
W 毎月の週 1
午前/午後マーク 午後
k 今日の時間 (1~24) 24
K A.M./P.M. (0~11) 形式の時間 10
z タイムゾーン 東部標準時
' テキスト区切り文字 区切り文字
一重引用符 `

printf を使用して日付を書式設定する

printf メソッドを使用すると、時刻と日付を簡単に書式設定できます。 t で始まり、以下の表の文字で終わる 2 文字の形式を使用します。例:

Current Date: Sun 2004.07.18 at 04:14:09 PM PDT

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

import java.util.Date;

public class DateDemo {

  public static void main(String args[]) {
     // 初始化 Date 对象
     Date date = new Date();

     // 使用toString()显示日期和时间
     String str = String.format("Current Date/Time : %tc", date );

     System.out.printf(str);
  }
}

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

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

Current Date/Time : Sat Dec 15 16:37:57 MST 2012

上記の例のコンパイル結果と実行結果は次のとおりです。

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, 2004

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

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

日付と時刻の変換文字

文字説明
c 完全な日付と時刻 月曜日 5 月 4 日 09:51:52 CDT 2009
F ISO 8601 形式の日付 2004-02-09
D 米国形式の日付 (月/日/年) 02/09/2004
24時間 18:05:19
r 12時間 06:05:19 pm
R 秒を除く 24 時間 18:05
はい 4 桁の年 (先頭の 0 を含む) 2004年
y 西暦の下 2 桁 (先頭の 0 を含む) 04
C 西暦の上 2 桁 (先頭の 0 を含む) 20
B 月の正式名称 2月
b 月の略語 2月
n 2 桁の月 (先頭の 0 を含む) 02
d 2 桁の日付 (先頭の 0 を含む) 03
e 2 桁の日付 (先頭の 0 を除く) 9
週の完全な名前 月曜日
週の略称
j 3 桁の年 (先頭の 0 を含む) 069
H 2 桁の時 (先頭の 0 を含む)、00 ~ 23 18
k 2桁の時(先頭の0を除く)、0~23 18
2 桁の時間 (先頭の 0 を含む)、01 から 12 06
l 2 桁の時間 (先頭の 0 を除く)、1 ~ 12 6
2 桁の分 (先頭の 0 を含む) 05
S 2 桁の秒 (先頭の 0 を含む) 19
L 3 桁のミリ秒 (先頭の 0 を含む) 047
N 9 ビット ナノ秒 (先頭の 0 を含む) 047000000
P 大文字の午後の記号 午後
p 小文字大文字の午後の記号 午後
z GMT からの RFC 822 デジタル オフセット -0800
Z タイムゾーン PST
s 1970-01-01 00:00:00 GMT からの秒数 1078884319
Q 1970-01-01 00:00:00 GMT 以降 1078884319047

他にも日付と時刻に関連する便利なクラスがあります。詳細については、Java 標準ドキュメントを参照してください。


文字列を時刻に解析します

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

Due date: February 09, 2004

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

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 sleep (スリープ)

sleep() は、現在のスレッドを停滞状態にし (現在のスレッドをブロックし)、使用を放棄します。その目的は、現在のスレッドがプロセスによって取得された CPU リソースを単独で占有して、他のスレッドが実行できるように一定の時間を残すことではありません。

プログラムを 1 ミリ秒間、またはコンピューターが動作する限りスリープ状態にすることができます。たとえば、次のプログラムは 3 秒間スリープします。

$ 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

上記の例は、次のようにコンパイルして実行します。

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

Calendar クラス

これで、日付オブジェクトの書式設定と作成が可能になりましたが、日付オブジェクトの特定の部分を設定および取得するにはどうすればよいですか?時間、日、分などの日付データはどうすればよいでしょうか? 答えは、Calendar クラスを使用することです。

Calendar クラスは Date クラスよりもはるかに強力であり、その実装も Date クラスよりも複雑です。

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

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

Fri Jan 08 09:48:47 CST 2016

Fri Jan 08 09:48:50 CST 2016

Difference is : 3019

指定した日付を持つ Calendar オブジェクトを作成する

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

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

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

これらの定数は、Calendar クラスでさまざまな意味を表すために使用されます。実際には、JDK の多くのクラスがこのアイデアを採用しています

Calendar。 Calendar.MONTHMonthCalendar.DATEDateCalendar.DAY_OF_MONTH日付は上記のフィールドと同じ意味です12時- 時間形式24時間形式の時間分秒週 何
ConstantDescription
Calendar.HOUR
Calendar.HOUR_OF_DAY
Calendar.MINUTE
Calendar.SECOND
Calendar.DAY_OF_WEEK

カレンダークラスオブジェクト情報設定

セット設定

例:

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

Call:

Calendar c1 = Calendar.getInstance();
public final void set(int year,int month,int date)

フィールドタイプ設定を使用

日付の値など、特定のフィールドのみを設定する場合は、次の set メソッド:

c1.set(2009, 6 - 1, 12);//把Calendar对象c1的年月日分别设这为:2009、6、12

c1 オブジェクトで表される日付を 10 日に設定すると、他のすべての値が再計算されます

public void set(int field,int value)

c1 オブジェクトで表される年を 2008 に設定すると、他のすべての値が再計算されます再計算

c1.set(Calendar.DATE,10);

その他のフィールド 属性セットの意味も同様に推定できます

設定を追加

c1.set(Calendar.YEAR,2008);

c1オブジェクトの日付に10を足す、つまりc1は10日後の日付として表現されます、他のすべての値が再計算されます

Calendar c1 = Calendar.getInstance();

c1 を追加します オブジェクトの日付から 10 を減算します。つまり、c1 は 10 日前の日付として表され、他のすべての値は再計算されます

c1.add(Calendar.DATE, 10);

他のフィールド属性の追加の意味は類推できます

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

<pre>c1.add(Calendar.DATE, -10);

GregorianCalendarクラス

Calendarクラスはグレゴリオ暦を実装しており、GregorianCalendarはCalendarクラスの固有の実装です。

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

GregorianCalendar オブジェクトのいくつかの構築メソッドを以下にリストします:

シリアル番号コンストラクターと説明
1グレゴリオ暦()
デフォルトのロケールとデフォルトのタイムゾーンの現在時刻を使用して、デフォルトの GregorianCalendar を構築します。
2グレゴリオ暦(int年、int月、int日付)
デフォルトのタイムゾーン、デフォルトのロケールで指定された日付設定を使用して GregorianCalendar を構築します
3グレゴリオ暦(int年、int月、int日付、int時間、int分)
デフォルトのタイムゾーンとデフォルトのロケールで指定された日付と時刻の設定を使用して GregorianCalendar を構築します。
4グレゴリオ暦(int年、int月、int日付、int時、int分、int秒)
デフォルトのタイムゾーンとデフォルトのロケールで指定された日付と時刻の設定を使用して GregorianCalendar を構築します。
5グレゴリオ暦(ロケールaロケール)
指定されたロケールのデフォルトのタイムゾーンの現在時刻に基づいて GregorianCalendar を構築します。
6グレゴリオ暦(タイムゾーンゾーン)
デフォルトのロケールを使用して、指定されたタイムゾーンの現在時刻に基づいて GregorianCalendar を構築します。
7グレゴリオ暦(タイムゾーンゾーン、ロケールaロケール)
指定されたロケールの指定されたタイムゾーンの現在時刻に基づいて GregorianCalendar を構築します。

GregorianCalendar クラスによって提供されるいくつかの便利なメソッドのリストを以下に示します。

シリアル番号方法と手順
1void add(int フィールド, int 量)
カレンダー ルールに従って、指定された (署名された) 時間を指定されたカレンダー フィールドに追加します。
2protected void computeFields()
UTC ミリ秒値をタイムドメイン値に変換します
3protected void computeTime()
カレンダーをオーバーライドし、タイムドメイン値を UTC ミリ秒値に変換します
4ブール値等しい(オブジェクトオブジェクト)
この GregorianCalendar を指定されたオブジェクトと比較します。
5int get(intフィールド)
指定したフィールドの時刻値を取得します
6int getActualMinimum(int フィールド)
現在の日付、指定されたフィールドの最大値を返します
7int getActualMinimum(int フィールド)
現在の日付、指定されたフィールドの最小値を返します
8int getGreatestMinimum(int フィールド)
この GregorianCalendar インスタンス内の指定されたカレンダー フィールドの最大の最小値を返します。
9日付 getGregorianChange()
グレゴリオ暦の変更日を取得します。
10int getLeastMinimum(int フィールド)
この GregorianCalendar インスタンスの指定されたカレンダー フィールドの最小最大値を返します
11int getMinimum(int フィールド)
この GregorianCalendar インスタンスの指定されたカレンダー フィールドの最大値を返します。
12日付getTime()
カレンダーの現在時刻を取得します。
13long getTimeInMillis()
長整数で表現されたカレンダーの現在時刻を取得します
14タイムゾーン getTimeZone()
タイムゾーンを取得します。
15int getMinimum(int フィールド)
指定されたフィールドの最小値を返します。