java.util パッケージは、現在の日付と時刻をカプセル化する Date クラスを提供します。 Date クラスは、Date オブジェクトをインスタンス化するための 2 つのコンストラクターを提供します。
最初のコンストラクターは、現在の日付と時刻を使用してオブジェクトを初期化します。
日付( )
2 番目のコンストラクターは、1970 年 1 月 1 日からのミリ秒数を表すパラメーターを受け取ります。
日付(長いミリ秒)
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 | booleanquals(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 からのミリ秒数を使用して時刻と日付を設定します。 |
10 | String toString() は、 Date オブジェクトを String 表現に変換し、文字列を返します。 |
Java で現在の日付と時刻を取得するのは非常に簡単です。次に示すように、Date オブジェクトの toString() メソッドを使用して、現在の日付と時刻を出力します。
java.util.Dateをインポートします。
パブリッククラスMain{
public static void main(String args[]) {
//Date オブジェクトを初期化します Date date = new Date();
// toString() 関数を使用して日付と時刻を表示します。 System.out.println(date.toString());
}
}
上記の例のコンパイルと実行結果は次のとおりです。
2013 年 5 月 4 日月曜日 09:51:52 CDT
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 を使用すると、実行に使用するユーザー定義の日付と時刻の形式を選択できます。例えば:
java.util.* をインポートします。
java.text.* をインポートします。
パブリッククラスMain{
public static void main(String args[]) {
日付 dNow = new Date( );
SimpleDateFormat ft =
new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
System.out.println("現在の日付: " + ft.format(dNow));
}
}
上記の例のコンパイルと実行結果は次のとおりです。
現在の日付: 2004 年 7 月 18 日 (日) 午後 4:14:09 PDT
時間パターン文字列は、時間形式を指定するために使用されます。このモードでは、すべての ASCII 文字がパターン文字として予約されており、次のように定義されます。
手紙 | 説明する | 例 |
---|---|---|
G | エポックマーク | 広告 |
y | 4桁の年 | 2001年 |
M | 月 | 7月または07日 |
d | 月の日付 | 10 |
h | AM/PM (1 ~ 12) 形式の時間 | 12 |
H | 時間 (0 ~ 23) | 22 |
メートル | 分 | 30 |
s | 秒 | 55 |
S | ミリ秒 | 234 |
E | 曜日 | 火曜日 |
D | 一年の日々 | 360 |
F | 月の曜日 | 2日(7月の第2水曜日) |
w | 年の週 | 40 |
W | 月の週 | 1 |
ある | 午前/午後マーク | 午後 |
k | 時間帯(1~24) | 24 |
K | AM/PM (0 ~ 11) 形式の時間 | 10 |
z | タイムゾーン | 東部標準時 |
' | テキスト区切り文字 | デリミタ |
」 | 一重引用符 | ` |
printf メソッドを使用すると、時刻と日付の書式を簡単に設定できます。 t で始まり、以下の表の文字で終わる 2 文字の形式を使用します。例えば:
java.util.Dateをインポートします。
パブリッククラスMain{
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);
}
}
上記の例のコンパイルと実行結果は次のとおりです。
現在の日付/時刻: 2012 年 12 月 15 日土曜日 16:37:57 MST
日付を繰り返し指定する必要がある場合、この方法で日付の各部分を書式設定するのは少し複雑です。したがって、フォーマット文字列を使用して、フォーマットされるパラメータのインデックスを示すことができます。
インデックスは % の直後にあり、$ で終わる必要があります。例えば:
java.util.Dateをインポートします。
パブリッククラスMain{
public static void main(String args[]) {
//Date オブジェクトを初期化します Date date = new Date();
// toString() を使用して日付と時刻を表示します。 System.out.printf("%1$s %2$tB %2$td, %2$tY",
"期限:"、日付);
}
}
上記の例のコンパイルと実行結果は次のとおりです。
期限: 2004 年 2 月 9 日
あるいは、< フラグを使用することもできます。これは、以前にフォーマットされたパラメータが再度使用されることを示します。例えば:
java.util.Dateをインポートします。
パブリッククラスMain{
public static void main(String args[]) {
//Date オブジェクトを初期化します Date date = new Date();
// 表示フォーマット時間 System.out.printf("%s %tB %<te, %<tY",
"期限:"、日付);
}
}
上記の例のコンパイルと実行結果は次のとおりです。
期限: 2004 年 2 月 9 日
キャラクター | 説明する | 例 |
c | 完全な日付と時刻 | 2009 年 5 月 4 日月曜日 09:51:52 CDT |
F | ISO 8601 形式の日付 | 2004-02-09 |
D | 米国形式の日付 (月/日/年) | 2004/02/09 |
T | 24時間 | 18:05:19 |
r | 12時間 | 午後6時05分19秒 |
R | 秒を除く 24 時間制 | 18:05 |
Y | 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 |
私 | 2桁の時(先頭の0を除く)、1~12 | 6 |
M | 2桁の分(先頭の0を含む) | 05 |
S | 2 桁の秒 (先頭のゼロを含む) | 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 オブジェクトのフォーマットされたストレージに従って文字列の解析を試みます。例えば:
java.util.* をインポートします。
java.text.* をインポートします。
パブリッククラスMain{
public static void main(String args[]) {
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd");
文字列入力 = args.length == 0 ? "1818-11-11" : args[0];
System.out.print(input + " として解析します ");
日付t;
試す {
t = ft.parse(入力);
System.out.println(t);
} catch (ParseException e) {
System.out.println("「 + ft を使用すると解析できません」);
}
}
}
上記の例のコンパイルと実行結果は次のとおりです。
$javaDateDemo
1818-11-11 水曜日 11 月 11 日 00:00:00 GMT 1818 として解析します
$ java DateDemo 2007-12-01
2007-12-01 2007 年 12 月 1 日土曜日 00:00:00 GMT として解析します
Javaスリープ(スリープ)
プログラムを 1 ミリ秒間、またはコンピューターが動作する限りスリープ状態にすることができます。たとえば、次のプログラムは 3 秒間スリープします。
java.util.* をインポートします。
パブリッククラスMain{
public static void main(String args[]) {
試す {
System.out.println(new Date( ) + "n");
Thread.sleep(5*60*10);
System.out.println(new Date( ) + "n");
} catch (例外 e) {
System.out.println("例外が発生しました!");
}
}
}
上記の例のコンパイルと実行結果は次のとおりです。
2009 年 5 月 3 日(日)18:04:41 GMT
2009 年 5 月 3 日(日)18:04:44 GMT
以下の例は、時間間隔をミリ秒単位で測定する方法を示しています。
java.util.* をインポートします。
パブリッククラスMain{
public static void main(String args[]) {
試す {
ロングスタート = System.currentTimeMillis( );
System.out.println(new Date( ) + "n");
Thread.sleep(5*60*10);
System.out.println(new Date( ) + "n");
ロングエンド = System.currentTimeMillis();
長い差分 = 終了 - 開始;
System.out.println("違いは : " + diff);
} catch (例外 e) {
System.out.println("例外が発生しました!");
}
}
}
上記の例のコンパイルと実行結果は次のとおりです。
2009 年 5 月 3 日(日)18:16:51 GMT
2009 年 5 月 3 日(日)18:16:54 GMT
差は3050
日付オブジェクトをフォーマットして作成できるようになりましたが、時間、日、分などの日付データの特定の部分を設定および取得するにはどうすればよいでしょうか。また、日付のこれらの部分に値を加算または減算するにはどうすればよいでしょうか? ? 答えは、Calendar クラスを使用することです。
Calendar クラスは Date クラスよりもはるかに強力であり、その実装も Date クラスよりも複雑です。
Calendar クラスは、実際に使用される特定のサブクラスのオブジェクトを実装する抽象クラスです。オブジェクトの作成プロセスはプログラマにとって透過的であり、getInstance メソッドを使用して作成するだけで済みます。
Calendar c = Calendar.getInstance();//デフォルトは現在の日付です
Calendar クラスを使用して特定の時刻を表すには、まず Calendar オブジェクトを作成し、次にそのオブジェクトに年、月、日のパラメータを設定して完了する必要があります。
//2009 年 6 月 12 日を表す Calendar オブジェクトを作成します。 Calendar c1 = Calendar.getInstance();
c1.set(2009, 6 - 1, 12);
これらの定数は、Calendar クラスでさまざまな意味を表すために使用されます。jdk の多くのクラスでは、実際にこの考え方が採用されています。
絶え間ない | 説明する |
---|---|
カレンダー.年 | 年 |
カレンダー.MONTH | 月 |
カレンダー.DATE | 日付 |
カレンダー.DAY_OF_MONTH | 日付は上記のフィールドとまったく同じ意味を持ちます |
カレンダー.時間 | 12時間時計の時間 |
カレンダー.HOUR_OF_DAY | 24時間時計の時間 |
カレンダー.分 | 分 |
カレンダー.SECOND | 2番 |
カレンダー.DAY_OF_WEEK | 曜日 |
設定を行う
のように:
カレンダー c1 = Calendar.getInstance();
電話:
public Final void set(int year,int month,int date)
c1.set(2009, 6 - 1, 12);//Calendar オブジェクト c1 の年、月、日を 2009, 5, 12 に設定します。
フィールドタイプ設定を使用する
日付などの特定のフィールドの値のみを設定する場合は、次の set メソッドを使用できます。
public void set(int フィールド,int 値)
c1 オブジェクトで表される日付を 10 日に設定すると、他のすべての値が再計算されます
c1.set(Calendar.DATE,10);
c1 オブジェクトによって表される年を 2008 に設定すると、他のすべての値が再計算されます。
c1.set(Calendar.YEAR,2008);
他のフィールド属性セットの意味は、類推して推測できます。
設定の追加
カレンダー c1 = Calendar.getInstance();
c1 オブジェクトの日付 (c1 で表される日付から 10 日後の日付) に 10 を加算します。他の値はすべて再計算されます。
c1.add(Calendar.DATE, 10);
c1 オブジェクトの日付 (c1 で表される日付の 10 日前の日付) から 10 を減算すると、他のすべての値が再計算されます。
c1.add(Calendar.DATE, -10);
他のフィールド属性に対する add の意味は、類推して推測できます。
カレンダー c1 = Calendar.getInstance();
// 年を取得 int year = c1.get(Calendar.YEAR);
// 月を取得 int month = c1.get(Calendar.MONTH) + 1;
// 日付を取得 int date = c1.get(Calendar.DATE);
// 時間を取得 inthour = c1.get(Calendar.HOUR_OF_DAY);
// 分を取得 int minutes = c1.get(Calendar.MINUTE);
// 2 番目の値を取得 int Second = c1.get(Calendar.SECOND);
// 曜日を取得します (注 (これは Date クラスとは異なります): 1 は日曜日を表し、2 は第 1 週を表し、3 は火曜日を表します。など)
int day = c1.get(Calendar.DAY_OF_WEEK);
Calendar クラスはグレゴリオ暦を実装し、GregorianCalendar は Calendar クラスの特定の実装です。
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, inthour, int minutes)デフォルトのロケールとデフォルトのタイムゾーンの指定された日付と時刻の設定を使用して GregorianCalendar を構築します。 |
4 | GregorianCalendar(int year, int month, int date, inthour, int minutes, int Second)デフォルトのロケールとデフォルトのタイムゾーンの指定された日付と時刻の設定を使用して GregorianCalendar を構築します。 |
5 | GregorianCalendar(Locale aLocale)指定されたロケールのデフォルトのタイムゾーンの現在時刻に基づいて GregorianCalendar を構築します。 |
6 | GregorianCalendar(TimeZonezone)デフォルトのロケールで指定されたタイムゾーンの現在時刻に基づいて GregorianCalendar を構築します。 |
7 | GregorianCalendar(TimeZonezone,LocaleaLocale)指定されたロケールの指定されたタイムゾーンの現在時刻に基づいて GregorianCalendar を構築します。 |
以下は、GregorianCalendar クラスによって提供されるいくつかの便利なメソッドのリストです。
シリアルナンバー | 方法と手順 |
1 | void add(int field, int amount)カレンダー ルールに従って、指定された (符号付き) 時間を指定されたカレンダー フィールドに追加します。 |
2 | protected void computeFields() はUTC ミリ秒値を時間ドメイン値に変換します |
3 | protected void computeTime() はカレンダーをオーバーライドし、時間ドメイン値を UTC ミリ秒に変換します。 |
4 | booleanquals(Object obj)この GregorianCalendar と指定された Object を比較します。 |
5 | int get(int field) は、指定されたフィールドの時刻値を取得します。 |
6 | int getActualMinimum(int field) は、現在の日付、指定されたフィールドの最大値を返します。 |
7 | int getActualMinimum(int field) は、現在の日付、指定されたフィールドの最小値を返します。 |
8 | int getGreatestMinimum(int field)この GregorianCalendar インスタンス内の指定されたカレンダー フィールドの最大の最小値を返します。 |
9 | Date getGregorianChange()グレゴリオ暦の変更日を取得します。 |
10 | int getLeastMinimum(int field)この GregorianCalendar インスタンスの指定されたカレンダー フィールドの最小最大値を返します。 |
11 | int getMinimum(int field)この GregorianCalendar インスタンスの指定されたカレンダー フィールドの最大値を返します。 |
12 | Date getTime() はカレンダーの現在時刻を取得します。 |
13 | long getTimeInMillis() は、 long 整数で表されるカレンダーの現在時刻を取得します。 |
14 | TimeZone getTimeZone() はタイムゾーンを取得します。 |
15 | int getMinimum(int field) は、指定されたフィールドの最小値を返します。 |
16 | int hashCode() はhashCode をオーバーライドします。 |
17 | boolean isLeap Year(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, inthour, int minutes) は、年、月、日、時、分の値を設定します。 |
22 | void set(int year, int month, int date, inthour, int minutes, int Second) は、年、月、日、時、分、秒の値を設定します。 |
23 | void setGregorianChange(Date date) は、 GregorianCalendar の変更日を設定します。 |
24 | void setTime(Date date) は、指定された日付でカレンダーの現在時刻を設定します。 |
25 | void setTimeInMillis(long millis) は、カレンダーの現在時刻を指定された長いミリ秒で設定します。 |
26 | void setTimeZone(TimeZone value)現在のタイムゾーンを指定されたタイムゾーン値で設定します。 |
27 | String toString() は、カレンダーを表す文字列を返します。 |
java.util.* をインポートします。
パブリック クラス GregorianCalendarDemo {
public static void main(String args[]) {
文字列月[] = {
「1月」、「2月」、「3月」、「4月」、
「5月」、「6月」、「7月」、「8月」、
"9 月"、"10 月"、"11 月"、"12 月"};
整数年。
// グレゴリオ暦を初期化します // 現在の時刻と日付を使用します // デフォルトは現地時間とタイムゾーンになります 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(年 = gcalendar.get(Calendar.YEAR));
System.out.print("時刻: ");
System.out.print(gcalendar.get(Calendar.HOUR) + ":");
System.out.print(gcalendar.get(Calendar.MINUTE) + ":");
System.out.println(gcalendar.get(Calendar.SECOND));
// 現在の年がうるう年かどうかをテストします if(gcalendar.isLeap Year(year)) {
System.out.println("今年はうるう年です");
}
それ以外 {
System.out.println("今年はうるう年ではありません");
}
}
}
上記の例のコンパイルと実行結果は次のとおりです。
日付: 2009 年 4 月 22 日
時間: 11:25:27
今年は閏年ではありません
Calender クラスの完全なリストについては、標準の Java ドキュメントを参照してください。