Javaは、現在の日付と時刻をカプセル化するJava.utilパッケージに日付クラスを提供します。
日付クラスは2つのコンストラクターをサポートします。最初のコンストラクターは、オブジェクトの現在の日付と時刻を初期化します。
日付( )
次のコンストラクターは、1970年1月1日の真夜中以降のミリ秒数に等しいパラメーターを受信します
日付(長いミリセック)
利用可能な日付オブジェクトがあると、次のサポートされている方法のいずれかを呼び出して時間を使用できます。
| sn | 方法と説明 |
|---|---|
| 1 | ブールアフター(日付) Call Dateオブジェクトに指定された日付以降が含まれている場合はtrueを返します。それ以外の場合は、falseを返します。 |
| 2 | Boolean前(日付) Call Dateオブジェクトが日付で指定された日付よりも前またはそれ以前に含まれている場合、trueを返します。それ以外の場合は、falseを返します。 |
| 3 | オブジェクトクローン() 日付オブジェクトへの呼び出しを繰り返します。 |
| 4 | int比較(日付) コールオブジェクトの値を日付と比較します。これらの2つの値が等しい場合、0を返します。呼び出しオブジェクトが日付より早い場合、負の値を返します。コールオブジェクトが日付より遅い場合、正の値を返します。 |
| 5 | int比較(オブジェクトobj) OBJがクラスの日付の場合、同じ比較(日付)操作を使用します。それ以外の場合は、ClassCastExceptionをスローします。 |
| 6 | ブールエコール(オブジェクト日付) CALL DATEオブジェクトに同じ時間と日付が指定された日付が含まれている場合、trueを返します。それ以外の場合は、falseを返します。 |
| 7 | long gettime() 1970年1月1日以来合格したミリ秒数を返します。 |
| 8 | int hashcode() 呼び出しオブジェクトのハッシュコードを返します。 |
| 9 | void Settime(長時間) 指定された時間を設定します。これは、1970年1月1日の真夜中からミリ秒単位で経過した時間を表します。 |
| 10 | string 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())を使用して時間と日付を表示します。 }}これにより、次の結果が生成されます。
5月4日09:51:52 CDT 2009
日付の比較
2つの日付を比較する方法は3つあります。
SimpleDateFormatを使用したフォーマット日付
SimpleDateFormatは、日付のフォーマットと変換にローカルに使用される具体的なクラスです。 SimpleDateFormatを使用すると、日付と時刻の形式にユーザー定義のスキーマを選択できます。例えば:
import java.util。*; import java.text。*; public class datemo {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( "現在の日付:" + ft.Format(dnow)); }}これにより、次の結果が生成されます。
現在の日付:Sun 2004.07.18 at 04:14:09 PM PDT
Simple DateFormatフォーマットコード
時間形式を指定するには、時間パターン文字列を使用します。このパターンでは、すべてのASCII文字はパターン文字として保持されます。これは次のように定義されています。
| キャラクター | 説明する | 例 |
|---|---|---|
| g | 時間インジケーター | 広告 |
| y | 4桁の年 | 2001年 |
| m | 中年の月 | 7月または07 |
| d | 月の日付 | 10 |
| h | 時間/pm(1〜12) | 12 |
| h | その日の時間(0〜23) | 22 |
| m | 数分 | 30 |
| s | 数分 | 55 |
| s | ミリ秒 | 234 |
| e | 曜日 | 火曜日 |
| d | 今年の日 | 360 |
| f | 月の曜日 | 2(7月に2番目の水) |
| w | 年の半ば | 40 |
| w | 今月の週 | 1 |
| a | AM/PMマーカー | PM |
| k | その日の時間(1〜24) | 24 |
| k | 時間/pm(0〜11) | 10 |
| z | タイムゾーン | 東部標準時間 |
| ' | テキストを残します | デリミタ |
| 「 | 単一の引用 | ` |
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); }}これにより、次の結果が生成されます。
現在の日付/時刻:12月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); }}これにより、次の結果が生成されます。
期日:2004年2月9日
または、<フラグを使用できます。同じパラメーターを意味し、上記の形式の仕様に従って再度使用する必要があります。例えば:
import java.util.date; public class datedemo {public static void main(string args []){//日付date date date = new date(); //フォーマット日付システムを表示します。 }}これにより、次の結果が生成されます。
期日:2004年2月9日
日付と時刻の変換文字
| キャラクター | 説明する | 例 |
|---|---|---|
| c | 完全な日付と時刻 | 5月4日09:51:52 CDT 2009 |
| f | ISO 8601日付 | 2004-02-09 |
| d | 米国の形式時間(月/日/年) | 2004年2月9日 |
| t | 24回のシステム | 18:05:19 |
| r | 12回のシステム | 06:05:19 PM |
| r | 24回のシステム、秒なし | 18:05 |
| y | 4桁の年(最初の行ゼロ列を使用) | 2004年 |
| y | 今年の最後の2桁(最初の行ゼロ列を使用) | 04 |
| c | 今年の最初の2桁(最初の行ゼロ列を使用) | 20 |
| b | 月の名前 | 2月 |
| b | 略語月名 | 2月 |
| m | 2桁の月(最初の行ゼロ列を使用) | 02 |
| d | 2桁の日付(最初の行ゼロ列を使用) | 03 |
| e | 2桁の日付(フォワードゼロ列なし) | 9 |
| a | 完全な週の名前 | 月曜日 |
| a | 週名の略語 | 月 |
| j | 年の半ばの3桁の日(最初の行ゼロ列を使用) | 069 |
| h | 2桁の時間(最初の行ゼロ列を使用)、00〜23の間 | 18 |
| k | 0から23の間の2桁の時間(前方ゼロ列なし) | 18 |
| 私 | 01〜12の間の2桁の時間(最初の行ゼロ列を使用) | 06 |
| l | 2桁の時間(前方ゼロ列なし)、1〜12 | 6 |
| m | 2桁の分(最初の行ゼロ列を使用) | 05 |
| s | 2桁の秒(最初の行ゼロ列を使用) | 19 |
| l | 3桁のミリ秒(最初の行ゼロ列を使用) | 047 |
| n | 9桁のナノ秒(最初の行ゼロ列を使用) | 047000000 |
| p | 大文字の午後のマーク | PM |
| p | 小文字の午後のマーク | PM |
| z | RFC 822 GMT番号からのオフセット | -0800 |
| z | タイムゾーン | PST |
| s | 秒1970-01-01 00:00:00 GMT | 1078884319 |
| Q | 1970-01-01 00:00:00からGMT | 1078884319047 |
文字列変換日
SimpleDateFormatクラスには、Parse()などの追加のメソッドがあります。これは、特定のSimpleDateFormatに保存されているオブジェクトの形式に基づいて文字列を変換しようとします。例えば:
Import java.util。*; import java.text。*; public class datemo {public static void main(string args []){simpledateFormat ft = new simpledateFormat( "yyyy-mm-dd");文字列input = args.length == 0? 「1818-11-11」:args [0]; System.out.print(input + "parses as");日付t; {t = ft.parse(input); System.out.println(t); } catch(parseexception e){system.out.println( "" + ftを使用して比類のない); }}}上記のプログラムの実行例は、次の結果を生み出します。
$ java datedemo181818-11-11ペルセス11月11日水
しばらく眠ります
冬眠中は、コンピューターのライフサイクル全体にいつでも実行できます。たとえば、次のプログラムは10秒間眠ります。
Import java.util。*; public class sleepdemo {public static void main(string args []){try {system.out.println(new date() + "/n"); thread.sleep(5*60*10); system.out.println(new date() + "/n"); } catch(例外e){system.out.println( "exception a exception!"); }}}これにより、次の結果が生成されます。
日曜日5月3日18:04:41 GMT 2009Sun 5月38:04:51 GMT 2009
実行時間を測定します
測定される可能性のある時点がミリ秒である場合がある場合があります。それでは、上記の例をもう一度書き直しましょう。
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( "差は:" + diff); } catch(例外e){system.out.println( "exception a exception!"); }}}これにより、次の結果が生成されます。
5月3日18:16:51 GMT 2009Sun 5月38:16:57 GMT 2009difference IS:5993
グレゴリアンカレンダークラス
グレゴリアンカレンダーは、カレンダークラスの具体的な実装です。つまり、あなたがよく知っている通常のグレゴリオグレゴリオグレゴリオの実装です。カレンダークラスについては、このチュートリアルでは説明していません。標準のJavaドキュメントを確認できます。
カレンダーのgetInstance()メソッドは、現在の日付と時間と時間のデフォルトのロケールとタイムゾーンで初期化されたグレゴリアンカレンダーを返します。 2つのフィールドは、グレゴリアンカレンダーで定義されています:ADとBC。これらは、グレゴリオカレンダーで定義されている2つの時代を表しています。
グレゴリアンカレンダーオブジェクトのコンストラクターもいくつかあります。
| sn | コンストラクターの説明 |
|---|---|
| 1 | GregorianCalendar() デフォルトのロケールを使用して、デフォルトのタイムゾーンの現在の時間を使用してデフォルトのグレゴリアンカレンダーを構築します。 |
| 2 | GregorianCalendar(int year、int month、int date) デフォルトのロケールをデフォルトのタイムゾーンに設定して、指定された日付でグレゴリアンカレンダーを構築します |
| 3 | GregorianCalendar(int year、int month、int date、int hour、int minute) 指定された日付と時刻がデフォルトのロケールを使用してデフォルトのタイムゾーンに設定されたグレゴリアンカレンダーを構築します。 |
| 4 | GregorianCalendar(int year、int month、int date、int hour、int minute、int second) 指定された日付と時刻がデフォルトのロケールでデフォルトのタイムゾーンに設定されたグレゴリアンカレンダーを作成します |
| 5 | グレゴリアンカレンダー(ロケールアロケール) 指定されたロケールの現在の時刻とデフォルトタイムゾーンに基づいてグレゴリアンカレンダーを構築します。 |
| 6 | グレゴリアンカレンダー(タイムゾーンゾーン) 現在の時刻に基づいて、グレゴリアンカレンダーは、デフォルトのロケールを使用して特定のタイムゾーンに組み込まれています。 |
| 7 | グレゴリアンカレンダー(タイムゾーンゾーン、ロケールアロケール) グレゴリアンカレンダーは、現在の時刻と指定されたロケールの特定のタイムゾーンに基づいて構築されています。 |
| sn | 方法と説明 |
|---|---|
| 1 | void add(int field、int量) カレンダーベースのルールは、指定された時間フィールドに指定された(署名された)時間を追加します。 |
| 2 | 保護されたボイドcomputefields() UTCをミリ秒の時間フィールド値に変換します。 |
| 3 | 保護されたvoid computeTime() カレンダーが時間ドメイン値を変換するミリ秒を上書きします。 |
| 4 | ブールエコール(オブジェクトOBJ) このグレゴリアンカレンダーは、オブジェクト参照と比較されます。 |
| 5 | int get(int field) 指定された時間ドメインの値を取得します。 |
| 6 | int getactualmaximum(int field) 現在の日付に与えられたフィールドの最大値を返します。 |
| 7 | int getActualminimum(int field) 現在の日付を考慮して、フィールドが持つ可能性のある最小値を返します。 |
| 8 | int getgreatestminimum(int field) 指定されたフィールドの高い値と最低値(変更がある場合)を返します。 |
| 9 | 日付getGregorianChange() グレゴリオカレンダーの変更日を取得します。 |
| 10 | int getleastmaximum(int field) 変更がある場合、指定されたフィールドの最低値を返します。 |
| 11 | int getmaximum(int field) 指定されたフィールドの最大値を返します。 |
| 12 | 日付getTime() カレンダーの現在の時間を取得します。 |
| 13 | long gettimeinmillis() カレンダーを取得するための現在の時刻。 |
| 14 | TimeZone getTimeZone() タイムゾーンを取得します。 |
| 15 | int getminimum(int field) 指定されたフィールドの最小値を返します。 |
| 16 | int hashcode() ハッシュコードを書き直します。 |
| 17 | Boolean isleapyear(int year) 特定の年は跳躍年であると判断します。 |
| 18 | ボイドロール(intフィールド、ブールアップ) 大きなフィールドを変更せずに、指定された時間フィールドにユニットを(上/下)(上/下)追加または減算します。 |
| 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) 年、月、日、時間、分、瞬間、フィールドの2番目の価値に設定します。 |
| 23 | void setGregorianChange(日付) グレゴリアンカレンダーの変更日を設定します。 |
| 24 | void Settime(日付) カレンダーの現在の時間と指定された日付を設定します。 |
| 25 | void setimeinmillis(長いミリ) 指定された長い値からカレンダーの現在の時間を設定します。 |
| 26 | void setimezone(タイムゾーン値) 指定されたタイムゾーン値でタイムゾーンを設定します。 |
| 27 | string toString() このカレンダーの文字列表現を返します。 |
Import Java.util。*; Public Class GregorianCalendardemo {public static void main(string args []){string months [] = {"jan"、 "feb"、 "mar"、 "apr"、 "5月int year; // //デフォルトのロケールとタイムゾーンの現在の日付と時刻を使用して、グレゴリアンカレンダーを作成します。 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.println(gcalendar.get(calendar.minute) + ":"); system.out.println(gcalendar.get(calendar.second)); //現在の年が跳躍年であるかどうかをテストする場合(gcalendar.isleapyear(year)){system.out.println( "今年は跳躍年"); } else {system.out.println( "今年は跳躍年ではありません"); }}}これにより、次の結果が生成されます。
日付:2009年4月22日時間:11:25:27今年は跳躍年ではありません
カレンダーアプレット
カレンダーアプレットを見てみましょう。ここでは、従来のMVC構造を使用して、CalendarViewer、CalendarController、およびCalendarModelの3つのカテゴリを設計します。
CalendarViewer.javaは主にUIを処理し、既存のコードを使用し、それを整理し、ビジネスロジックを抽出し、ディスプレイレイヤー処理に焦点を当てます。
calendarViewer.java
Public Class CalendarViewer拡張jwindow explments actionlistener {jpanel calendarympanel = null; jbutton leftbutton = new jbutton( "<<"); jbutton rightbutton = new jbutton( ">>");ラベルyearlabel = new label();ラベル月label = new label();ラベルpasseddayslabel = new label(); jPanel CalendarWdpanel = null; //は、calendor_weekとcalendar_days jpanel calendarweekpanel = null; //毎週の列のレイアウトjpanel calendardayspanel = null; //日付列のレイアウトjpanel calendarexitpanel = null; jbutton quitbutton = new jbutton( "close"); border emptyborder = borderfactory.createemptyborder(); CalendarController ccontroller = new CalendarController(); public CalendarViewer(){super(); buildui(); } public void buildui(){buildtoppanel(); buildcenterpanel(); buildbottompanel(); setLayout(new borderlayout()); 。 。 。 。 。 。 } private void buildtoppanel(){。 。 。 。 。 。 } private void buildcenterpanel(){。 。 。 。 。 。 } private void buildbottompanel(){。 。 。 。 。 。 } public jpanel updatedayspanel(){。 。 。 。 。 。 } public void updatePassedDaysLabel(){。 。 。 。 。 。 } public void ActionPerformed(ActionEvent E){。 。 。 。 。 。 } public static void main(string [] args){shingutilities.invokelater(new runnable(){public void run(){new CalendarViewer();}}); }}UI構造は、主に3つのブロックに分割され、上、中央、下の3つのパネルに対応しています。
イベントリスニングの処理は、次の方法で完了します。
イベントベースのUIアップデートは、次の2つの方法によって行われます。
updatedayspanel(); updatePassedDaysLabel(); CalendarController.javaは主に特定のビジネスロジックを扱いますが、特定のアプリケーションに関連しない使用されたいくつかのカレンダーアルゴリズムロジックは、CalendArmodel.javaに引き渡されます。 Calendarmodel.javapublic class calendarmodel {private int daytab [] [] = {{0、31、28、31、30、31、30、31、31、30、31、30、31、30、31}、{0、31、29、30、31、30、31、31、31、30、31}}; public boolean isleapyear(int year){return((year%4 == 0 && year%100!= 0)|| year%400 == 0); } public int dayofyear(int day、int month、int year){int leap = isleapyear(year)? 1:0; for(int i = 1; i <month; i ++)day+= daytab [leap] [i];帰りの日; } public int daysofmonth(int month、int year){int leap = isleapyear(year)? 1:0; return daytab [leap] [month]; } public int dayofweek(int day、int month、int year){if(month == 1){month = 13;年 - ; } if(month == 2){月= 14;年 - ; } return(day + 2 *月 + 3 *(月 + 1) / 5 +年 +年 / 4-年 / 100 +年 / 400)%7 + 1; }}それぞれLeap年と非骨折年の月額を表す2次元配列を作成します。主な方法は次のとおりです。
キム・ラーソン計算式