Javaで一般的に使用される日付クラスの詳細な説明
記事のディレクトリ
Dateクラスの概要-JDK11API
Dateクラスは、ミリ秒の精度で特定の瞬間を表します。
public class Date extends Object implements Serializable, Cloneable, Comparable<Date>
Datelクラスが作成されたときのステートメントによると、Dateクラスはシリアル化可能、クローン可能、および比較可能であり、比較の順序が固定されていることがわかります。
JDK 1.1より前は、Dateクラスに2つの追加機能がありました。これにより、日付を年、月、日、時、分、および秒の値として解釈できます。また、日付文字列のフォーマットと解析も可能です。残念ながら、これらの機能APIは国際化には適していません。JDK 1.1以降では、Calendarクラスを使用して日付フィールドと時刻フィールドを変換し、DateFormatクラスを使用して日付文字列をフォーマットおよび解析する必要があります。Dateの対応する方法は推奨されません。
年、月、日、時、分、秒の値を受け入れるか返すすべてのDateクラスのメソッドでは、次の表記を使用します。
- 月は0から11までの整数で表され、0は1月、1は2月など、11月は12月です。
- 時間は0から23までの整数で表されます。したがって、午前0時から午前1時までの時間は0時間であり、正午から午後1時までの時間は12時間です。
- 1分は、通常の方法で0から59までの整数で表されます。
日付オブジェクトの作成
日付()
このメソッドによって作成されたDateオブジェクトは現在の時刻です
源码: public Date() { this(System.currentTimeMillis()); //注释:System.currentTimeMillis() 可以获得当前时间的毫秒数 }
Date()方法的使用: Date() 分配 Date对象并对其进行初始化,使其表示分配时间,测量 Date到毫秒。 Date date = new Date(); System.out.println(date); 打印结果:Sun Jan 24 00:47:54 CST 2021
Dateオブジェクトのデフォルトの形式は、「曜日、月、日、時:分:秒、地域の年」です
。CSTは、中国標準時刻を意味します。これは、東馬地区の北京時間です。日付(長時間)
このメソッドは、指定された時刻にDateオブジェクトを作成し、指定された時刻を指定されたミリ秒数で設定できます(注:ミリ秒数は、現在の時刻と1970年1月1日の00:00:00GMTとの差です。しかし、私たちはイーストエイトディストリクトにいるので、実際には1970年1月1日の00:08:00との違いです)
源码: public Date(long date) { fastTime = date; }
方法的使用: Date(long time) 分配 Date对象并初始化它以表示自标准基准时间(称为“纪元”)以来的指定毫秒数,即1970年1月1日00:00:00 GMT。 long time1 = 1611420846276L; Date date1 = new Date(time1); System.out.println(date1); 打印结果:Sun Jan 24 00:54:06 CST 2021 这里面要注意 time 赋值的 long类型的数字已经超过了int 的存储范围,要在数字后面加上L,不然会报错"Integer number too large". 但我们一般很少直接写个如此之大的毫秒数来设置时间。下面给定一种新的设置时间的格式。 long time2 = System.currentTimeMillis(); //注释:System.currentTimeMillis() 可以获得当前时间的毫秒数 System.out.println(time2); Date date2 = new Date(time2); System.out.println(date2); 打印结果:1611422082340 Sun Jan 24 01:14:42 CST 2021
後でCalendarクラスとDateFormatクラスを学習し、文字列を入力して時刻のDateオブジェクトを生成する時刻を指定するなど、Dateを生成する方法は他にもありますが、これらはすべてDate()およびDate()と呼ばれます。長い間)これらの2つの方法。
Dateクラスの一般的なメソッド(廃止されていないメソッド)
方法後(いつ)
源码: public boolean after(Date when) { return getMillisOf(this) > getMillisOf(when); }
ソースコードによると、このメソッドの戻り値のデータ型がブール値であることを確認するのは難しくありません。
このメソッドの機能は、Dateオブジェクトの日付が指定された日付より後かどうかをテストすることです。
結果:このDateオブジェクトで表される時刻がwhenで表される時刻よりも厳密に遅い場合にのみtrue、それ以外の場合はfalse。after(Date when)方法的使用: //使用之前创建过得date1和date2 boolean test1 = date1.after(date2); System.out.println(test1); 打印结果: false // 表示date1 早于 date2
可能发生的异常:NullPointerException - 如果 when为空。
方法前(いつ)
源码: public boolean before(Date when) { return getMillisOf(this) < getMillisOf(when); }
このメソッドの戻り値のデータ型はブール値です。
機能:この日付が指定された日付より前であるかどうかをテストします。
結果:このDateオブジェクトで表される時刻がwhenで表される時刻よりも厳密に早い場合にのみtrue、それ以外の場合はfalse。before(Date when)方法的使用: //使用之前创建过得date1和date2 boolean test2 = date1.before(date2); System.out.println(test2); 打印结果: true 可能出现的异常:NullPointerException - 如果 when为空。
方法compareTo(DateanotherDate)
源码: public int compareTo(Date anotherDate) { long thisTime = getMillisOf(this); long anotherTime = getMillisOf(anotherDate); return (thisTime<anotherTime ? -1 : (thisTime==anotherTime ? 0 : 1)); //如果thisTime小则返回-1,相等返回0,大于返回1.
このメソッドの戻り値のデータ型はintです。
役割:2つのDateオブジェクトの順序を比較します。compareTo(Date anotherDate)方法的使用: //使用之前创建过得date1和date2 int order = date1.compareTo(date2); System.out.println(order); 打印结果: -1 // 表示date1的顺序在date2之前 即date1早于date2 可能放生的异常:NullPointerException - 如果 anotherDate为空。
メソッドが等しい(Object obj)
public boolean equals(Object obj) { // obj - 要与之比较的对象。 return obj instanceof Date && getTime() == ((Date) obj).getTime(); }
このメソッドの戻り値のデータ型はブール値です。
このメソッドの機能:2つのDateオブジェクトの内容を比較します。つまり、時間ミリ秒が等しいかどうかを比較します。
結果:オブジェクトが同じ場合はtrue、それ以外の場合はfalse。equals(Object obj)方法的使用: //使用之前创建过得date1和date2 boolean test3 = date1.equals(date2); 打印结果:false // 表示两个Date对象的时间不相等
メソッドgetTime()
源码: public long getTime() { return getTimeImpl(); } //调用的这个方法是私有的不细究了,大概作用是判断时间是否是标准化时间,如果不是则变成标准化的时间再返回对应的毫秒数,涉及到Calendar类
このメソッドの戻り値のデータ型はlongです。
この関数は、このDateオブジェクトによって表される1970年1月1日00:00:00GMTからのミリ秒数を返します。getTime()方法的使用: //使用前面创建的对象date1 long getTime = date1.getTime(); System.out.println(getTime); 打印结果: 1611420846276 //与前面创建date1时赋值的毫秒数一致
メソッドsetTime(長時間)
源码: public void setTime(long time) { fastTime = time; cdate = null; }
このメソッドのタイプは無効であり、値を返しません。
関数:このDateオブジェクトを設定して、1970年1月1日のグリニッジ標準時の00:00:00以降のミリ秒単位の時点を表します。
パラメータ:time-ミリ秒数。setTime(long time)方法的使用: //使用前面创建的对象date1与date2,变量time1 System.out.println(date1.equals(date2)?"date1与date2时间相同":"date1与date2时间不相同"); date2.setTime(time1); System.out.println(date1.equals(date2)?"date1与date2时间相同":"date1与date2时间不相同"); 打印结果: date1与date2时间不相同 date1与date2时间相同 //说明date2调用setTime()方法后时间已经变为date1的时间了。
Dateクラスの珍しいメソッドの紹介
メソッドclone()
public Object clone()
これは、Objectクラスのclone()メソッドをオーバーライドします。この
メソッドは、このオブジェクトのコピーを返します。
結果:このインスタンスのクローン。
ソースコードに含まれるクラスは、一時的に手の届かないところにある場合はリリースされません。
cloneメソッドの本質は、現在のオブジェクトのコンテンツをコピーして新しいDateオブジェクトに割り当てることです。そのため、返されるコピーの時間はオントロジーと同じですが、コピーのアドレスはオントロジーと同じではありません。验证 clone()方法: //使用前面创建的对象date1 Date date3 = (Date) date1.clone(); System.out.println(date1 == date3); System.out.println(date1.equals(date3)); 打印结果: false true // false表示两者地址不同即克隆出来的对象拥有新的地址, true表示两者内容相同
方法from(インスタントインスタント)
public static Date from(Instant instant)
役割:InstantオブジェクトからDateのインスタンスを取得します。Instantで使用される精度はナノ秒ですが、Dateで使用される精度はミリ秒です。変換により、ナノ秒単位の整数が100万で除算されたかのように、余分な精度の情報が切り捨てられます。Instantは将来のタイムラインにポイントを保存でき、Dateよりもはるかに大きくなります。この場合、このメソッドは例外IllegalArgumentExceptionをスローします-インスタントが大きすぎてDate
パラメーターinstantとして表現できない場合-時間のナノ秒単位のインスタント
結果:メソッドはDateオブジェクトを返し、Dateは上の同じポイントを表します提供されたインスタントとしてのタイムライン
Javaバージョン1.8以降、
このメソッドは基本的にこの段階では使用されないため、デモンストレーションは行われません。メソッドhashCode()
public int hashCode()
役割:このオブジェクトのハッシュコード値を返します。結果は、getTime()メソッドによって返される元のlong値の2つの半分の排他的論理和です。言い換えると、ハッシュコードは式の値です。
(int)(this.getTime()^(this.getTime()>>> 32))
は、クラスObjectのhashCodeメソッドを書き換えた
結果です。このオブジェクトの値ハッシュコード値。
ソースコードコンパイラは、基本的にハッシュテーブルを実現する目的で自動生成できますが、使用しない場合は基本的に表示されません。メソッドtoInstant()
public Instant toInstant()
機能:このDateオブジェクトをInstantに変換します。
結果:このDateオブジェクトとタイムライン上の同じポイントを表す瞬間
。Java1.8以降。
このメソッドに関連するクラスは基本的に使用されないため、ソースコードとメソッド使用の表示は書き込まれません。メソッドtoString()
public String toString()
ソースコードには、当面は学習および使用されていない多くのクラスが含まれているため、
関数は示しません。このDateオブジェクトを次の形式の文字列に変換します
。dowmondd hh:mm:ss zzz yyyy
説明:
-ダウは曜日(日、月、火、水、木、金、土)です。
-monは月です(1月、2月、3月、4月、5月、6月、7月、8月、9月、10月、11月、12月)。
-ddは月の日(01から31)で、小数点以下2桁です。
-hhは、1日の時間(00から23)で、小数点以下2桁です。
-mmは、1時間以内の分(00〜59)で、小数点以下2桁です。
-ssは分の秒(
00〜61 、小数点以下2桁。-zzzはタイムゾーン(夏時間を反映する場合があります)。標準のタイムゾーンの省略形には、parseメソッドで認識されるものが含まれます。タイムゾーン情報が利用できない場合、zzzは空です
-つまり、文字はまったく含まれていません。-yyyyは年、4桁です。toString()方法的使用: //使用前面已创建的对象date1 System.out.println(date1.toString()); 打印结果: Sun Jan 24 00:54:06 CST 2021
このメソッドが一般的に使用されない理由は、形式が複雑すぎるためです。後で、年の「yyyy-MM-dd」文字列表示形式など、DateFormatクラスで日付を文字列に変換するためのより単純な形式を設定できます。月、日。