Javaの日付時刻
日付java.utilパッケージには、現在の日付と時刻をカプセル化するクラスを提供します。 Dateクラスは、Dateオブジェクトをインスタンス化するために、2つのコンストラクタを提供します。
最初のコンストラクタは、オブジェクトを初期化するために、現在の日付と時刻を使用しています。
Date( )
第二のコンストラクタは、1970年1月1日からのミリ秒数をあるパラメータを受け付けます。
Date(long millisec)
Dateオブジェクトを作成したら、次のメソッドを呼び出すことができます。
いいえ。 | メソッドと説明 |
---|---|
1 | 後にブール値(日付) 指定した日付後の日付オブジェクトがtrueを返すときにこのメソッドが呼び出された場合、それ以外の場合はfalseを返します。 |
2 | 前にブール値(日付) 指定した日付の前にDateオブジェクトがtrueを返すときにこのメソッドが呼び出された場合、それ以外の場合はfalseを返します。 |
3 | オブジェクトのクローン() このオブジェクトのコピーを返します。 |
4 | int型のcompareTo(日付) このメソッドが呼び出されるの比較時に指定した日付にDateオブジェクト。 2が等しいときに0を返します。 指定された日付が負の数を返す前にオブジェクトを呼び出します。 指定された日付が正の数を返した後のオブジェクトを呼び出します。 |
5 | int型のcompareTo(オブジェクトobj) objがDate型の場合は、操作がのcompareTo(日)に相当します。 それ以外の場合は、ClassCastExceptionがスローされます。 |
6 | ブールのequals(オブジェクト日付) あなたは、このメソッドを呼び出し、Dateオブジェクトはtrueを返したときに指定した日付に等しい場合、それ以外の場合はfalseを返します。 |
7 | 長いgetTime() それは、このDateオブジェクトで表さ00:00:00 GMT 1970年1月1日からのミリ秒数を返します。 |
8 | int型のhashCode() このオブジェクトのハッシュコード値を返します。 |
9 | ボイドのsetTime(長時間) セルフ1970年1月1日の日付と時刻を設定するための00:00:00 GMTミリ秒後の時間。 |
10 | 文字列のtoString() 変換日付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()); } }
次のような結果をコンパイルした上記の例は次のとおりです。
Mon May 04 09:51:52 CDT 2013
日付を比較
Javaは、次の二つの日付を比較するために3つのメソッドを使用しています。
- その後、2つの値を比較し、(からのミリ秒数を介して1970年1月1日)の二つの日付を取得するために、getTime()メソッドを使用します。
- ()とequals()の後に、()の前に使用してください。 例えば、18より12月初め、新しいDate(99、2、12).before(新しいDate(99、2、18))がtrueを返します。
- Comparableインタフェースで定義される使用のcompareTo()メソッドは、Dateクラスは、このインタフェースを実装しています。
日付をフォーマットするために使用して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 ("E yyyy.MM.dd 'at' hh:mm:ss a zzz"); System.out.println("Current Date: " + ft.format(dNow)); } }
次のような結果をコンパイルした上記の例は次のとおりです。
Current Date: Sun 2004.07.18 at 04:14:09 PM PDT
シンプルにDateFormat形式のエンコード
時間パターン文字列は、時刻フォーマットを指定するために使用されます。 次のようにパターン文字が定義されているように、このモードでは、すべてのASCII文字は予約されています:
手紙 | 説明 | 例 |
---|---|---|
G | 時代マーク | AD |
Y | 四年 | 2001 |
M | 月 | 7月か07 |
D | 月日 | 10 |
時間 | AM / PM(1〜12)時間形式 | 12 |
H | 日の時間(23から0) | 22 |
メートル | 分の数 | 30 |
の | 秒 | 55 |
S | ミリ秒 | 234 |
E | 曜日 | 火曜日 |
D | 通日 | 360 |
F | 週の月の最初の週 | 2(7月第二水曜) |
ワット | 今年の最初の数週間 | 40 |
W | 月の最初の週 | 1 |
A | AM / PMマーク | PM |
K | 日の時間(24から1) | 24 |
K | AM / PM(0〜11)時間形式 | 10 |
Z | 時間帯 | 東部標準時 |
' | テキスト区切り文字 | デリミタ |
「 | 単一引用符 | ` |
printf書式の日付を使用します
printfの方法は、簡単に時間と日付をフォーマットすることができます。 それは手紙の最後にトンとし、以下の表に開始し、2文字の形式を使用します。 例えば:
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); } }
次のような結果をコンパイルした上記の例は次のとおりです。
Due date: February 09, 2004
日付および時刻変換文字
文字 | 説明 | 例 |
C言語 | 完全な日付と時刻 | 月5月4日午前9時51分52秒CDT 2009 |
F | ISO 8601形式の日付 | 2004-02-09 |
D | 米国の日付形式(月/日/年) | 2004年2月9日 |
T | 時間24時間 | 午前18時05分19秒 |
R | 12時間の時間 | 6時05分19秒午後 |
R | 24時間の時間は、秒が含まれていません。 | 18:05 |
Y | (先行ゼロ)4年 | 2004 |
Y | 2年後(先行ゼロ付き) | 04 |
C言語 | 2年前(先行ゼロ付き) | 20 |
B | 完全な月の名前 | 2月 |
B | 月の頭字語 | 2月 |
n個 | (先行ゼロ付き)2ヶ月 | 02 |
D | (先行ゼロ付き)2日 | 03 |
電子 | 2日目(先頭の0を含みません) | 9 |
A | 週フルネーム | 月曜日 |
A | ショート週 | 月 |
J | (先行ゼロ)3年 | 069 |
H | (先行ゼロ)を2時間、00〜23 | 18 |
K | (先頭の0を含まない)で2時間、0-23 | 18 |
私 | 2時間(先行ゼロ)、1月12日 | 06 |
リットル | (先頭の0を含まない)で2時間、1月12日 | 6 |
M | (先行ゼロ付き)2分 | 05 |
S | (先行ゼロ)を2秒 | 19 |
L | (先行ゼロ)3秒 | 047 |
N | (先行ゼロ)9 NS | 047000000 |
P | フラグの午後に資産計上 | PM |
P | 小文字のロゴの午後 | 午後 |
Z | RFC 822デジタルでGMTからのオフセット | -0800 |
Z | 時間帯 | PST |
の | 1970年1月1日00:00:00 GMTからの秒数 | 1078884319 |
Q | 1970年1月1日00:00:00 GMTセント素晴らしいので、 | 1078884319047 |
他の有用な日付やクラスの時間があります。 詳細については、Java標準のドキュメントを参照してくださいすることができます。
時間文字列をパースします
SimpleDateFormatクラスは文字列を解析するために与えられて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の休眠(スリープ)
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
クラスのカレンダー
どのように日付のプラスまたはマイナスのこれらの部分で私たちすることができます?私たちは今、日付オブジェクトをフォーマットして作成することができますが、どのように我々は、時間、日、または分などの日付データを、設定し、それの特定の部分を取得することができます?答えは、カレンダーのカテゴリを使用することです。
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);
カレンダークラスオブジェクトフィールドタイプ
これらの定数で使用されるカレンダーの種類が異なる意味を表し、多くの思考は、このクラスは、実際には、JDK内で使用されています
定数 | 説明 |
---|---|
Calendar.YEAR | 年 |
Calendar.MONTH | 月 |
Calendar.DATE | 日付 |
Calendar.DAY_OF_MONTH | 日付、および上記のフィールドの意義と同じ |
Calendar.HOUR | 12時間の時間 |
Calendar.HOUR_OF_DAY | 24時間の時間 |
Calendar.MINUTE | 分 |
Calendar.SECOND | 2番目 |
Calendar.DAY_OF_WEEKの | 曜日 |
カレンダークラスオブジェクトの情報を設定します
セットの設定
以下のような:
Calendar c1 = Calendar.getInstance();
呼び出します。
public final void set(int year,int month,int date)
c1.set(2009, 6 - 1, 12);//把Calendar对象c1的年月日分别设这为:2009、6、12
フィールドタイプの設定を使用します
のみ設定されている場合、このような値日付などのフィールドは、次の方法を使用して設定することができます。
public void set(int field,int value)
Dateオブジェクトが10に設定されているC1表し、他のすべての値が再計算されます
c1.set(Calendar.DATE,10);
オブジェクトは、他のすべての値が再計算され、年間C1は2008年に設定されている表し
c1.set(Calendar.YEAR,2008);
そのように設定されている他のフィールドプロパティの意味
設定を追加
Calendar c1 = Calendar.getInstance();
10日の日付以降、他のすべての値が再計算されているように、目標期日プラス10 c1は、c1がまた表現されます
c1.add(Calendar.DATE, 10);
目標期日マイナス10 c1が、c1がまた、10日前の日付として表現され、他のすべての値が再計算されます
<pre>c1.add(Calendar.DATE, -10);
ので、他のフィールドプロパティを意味追加
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代表星期1、3代表星期二,以此类推) int day = c1.get(Calendar.DAY_OF_WEEK);
GregorianCalendarクラス
Calendarクラスはグレゴリオ暦を実装して、GregorianCalendarのカレンダークラスは、具体的な実装です。
getInstance()メソッドのカレンダーは、GregorianCalendarのオブジェクト初期化し、現在のロケールとタイムゾーンにデフォルト値を返します。 ADとBC:GregorianCalendarを2つのフィールドが定義されています。 これらは、2カレンダーは時代を定義して表します。
以下に示すいくつかのGregorianCalendarオブジェクトのコンストラクタです:
いいえ。 | コンストラクタと説明 |
1 | GregorianCalendarの() あなたが持っている場合にはデフォルトロケールのデフォルトのタイムゾーンはデフォルトのGregorianCalendar電流を構築します。 |
2 | GregorianCalendarの(int型の年、int型の月、 int型の日付) あなたが持っている場合、デフォルトロケールのデフォルトゾーンは、指定された日付が設定されたGregorianCalendarを構築します |
3 | GregorianCalendarの(int型の年、int型の月、 int型の日付、int型の時、int型分) GregorianCalendarをデフォルトロケールのデフォルトのタイムゾーンを持つことは、与えられた日付と時刻の設定を構築します。 |
4 | GregorianCalendarの(int型の年、int型の月、 int型の日付、int型の時、int型の分、int型秒) GregorianCalendarをデフォルトロケールのデフォルトのタイムゾーンを持つことは、与えられた日付と時刻の設定を構築します。 |
5 | GregorianCalendarの(ロケールaLocale) あなたはデフォルトロケールの領域を設定する必要がある場合のGregorianCalendar基づいて現在時刻を構築します。 |
6 | GregorianCalendarの(タイムゾーンのゾーン) デフォルトのロケール指定されたタイムゾーンの現在時刻に基づいてGregorianCalendarを構築します。 |
7 | GregorianCalendarの(タイムゾーンゾーン、ロケールaLocale) 指定されたロケール指定されたタイムゾーンの現在時刻に基づいてGregorianCalendarを構築します。 |
ここでのGregorianCalendarクラスのリストは、いくつかの便利なメソッドを提供します:
いいえ。 | メソッドと説明 |
1 | ボイド追加(int型のフィールド、int型の量 ) 指定されたカレンダーの規則に従って指定されたカレンダフィールドに時間の量を(署名しました)。 |
2 | 保護されたボイドcomputeFields() UTCミリ秒の変換時間閾値 |
3 | 保護されたボイドcomputeTime() カレンダーをカバーする、UTCミリ秒までの時間フィールド値に変換します |
4 | ブールのequals(オブジェクトobj) このGregorianCalendarを指定されたオブジェクトを比較します。 |
5 | int型のget(int型のフィールド) 指定したフィールドの時刻値を取得します。 |
6 | int型getActualMaximum(int型フィールド) 現在の日付、与えられたフィールドの最大値を返します。 |
7 | int型getActualMinimum(int型フィールド) 現在の日付、与えられたフィールドの最小値を返します。 |
8 | int型getGreatestMinimum(int型フィールド) GregorianCalendarを指定されたカレンダフィールドの最大最小値を返します。 |
9 | 日付getGregorianChange() グレゴリオ暦の切り換え日を取得します。 |
10 | int型getLeastMaximum(int型フィールド) 戻り値指定されたカレンダフィールド最低最大値のこのGregorianCalendarインスタンスに |
11 | int型のgetMaximum(int型フィールド) 最大カレンダフィールド指定されたGregorianCalendarのインスタンスを返します。 |
12 | 日付getTime() 現在の暦時間を取得します。 |
13 | 長いgetTimeInMillis() 現在の時間の長い整数表現でカレンダーを入手 |
14 | タイムゾーンgetTimeZoneの() タイムゾーンを取得します。 |
15 | int型getMinimumは(int型フィールド) 戻る与えられたフィールドの最小値。 |
16 | int型のhashCode() ハッシュコードを書き換えます。 |
17 | ブールISLEAPYEAR(int型年) 指定された年がうるう年であるかどうかを判定します。 |
18 | ボイドロール(int型フィールド、ブールアップ ) 大きいフィールドを変更せずに、(アップ/ダウン)時間の単一の単位を加算または減算する指定された時間フィールド上。 |
19 | 無効セット(int型フィールド、int値 ) 与えられた時間値フィールドを持ちます。 |
20 | 無効セット(int型の年、int型の月 、int型の日付) 、年月、日の値を設定します。 |
21 | 無効セット(int型の年、int型の月 、int型の日付、int型の時、int型分) 年、月、日、時、分の値を設定します。 |
22 | 無効セット(int型の年、int型の月 、int型の日付、int型の時、int型の分、int型秒) 年、時、分、月の第2の値を設定し、一日。 |
23 | ボイドsetGregorianChange(日付) GregorianCalendarの変更日付を設定します。 |
24 | ボイドのsetTime(日付) 与えられた日付セットCalendarの現在時刻を持ちます。 |
25 | ボイドsetTimeInMillis(長いミリ秒) long型の指定された数は、Calendarの現在時刻をミリ秒単位に設定されていると。 |
26 | ボイドはsetTimeZone(タイムゾーン値) 現在のタイムゾーンにタイムゾーンの設定で。 |
27 | 文字列の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 当前年份不是闰年