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 | オブジェクトクローン( ) このオブジェクトのコピーを返します。 |
4 | int CompareTo(日付日付) このメソッドが呼び出されたときに、Date オブジェクトと指定された日付を比較します。両者が等しい場合は 0 が返されます。呼び出し元のオブジェクトが指定された日付より前の場合は、負の数が返されます。呼び出し元のオブジェクトは、指定された日付の後に正の数値を返します。 |
5 | int CompareTo(オブジェクトobj) obj が Date 型の場合、この操作は CompareTo(Date) と同等です。それ以外の場合は、ClassCastException がスローされます。 |
6 | ブール値に等しい(オブジェクトの日付) このメソッドを呼び出す Date オブジェクトが指定された日付と等しい場合は true を返し、それ以外の場合は false を返します。 |
7 | long getTime( ) 1970 年 1 月 1 日 00:00:00 GMT 以降、この Date オブジェクトによって表されるミリ秒数を返します。 |
8 | int hashCode( ) このオブジェクトのハッシュ コード値を返します。 |
9 | void 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 の多くのクラスがこのアイデアを採用しています
Constant | Description | |||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Calendar.MONTH | ||||||||||||||||||||||||||||||||||||||||||||||||||
Calendar.DATE | ||||||||||||||||||||||||||||||||||||||||||||||||||
Calendar.DAY_OF_MONTH | ||||||||||||||||||||||||||||||||||||||||||||||||||
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 オブジェクトのいくつかの構築メソッドを以下にリストします:
GregorianCalendar クラスによって提供されるいくつかの便利なメソッドのリストを以下に示します。
|