1.DateクラスとUnix時間

Java の最初の頃から、この言語には時刻と日付を扱うための特別なクラスがありました — DateDate時間の経過とともに、日付を操作するためのクラスがさらにいくつか登場しましたが、プログラマーは今でもこのクラスを使用し続けています。

それは非常に簡単で便利だからです。プログラマーであれば、実際のプロジェクトで必ず遭遇するでしょう。それを使用するかどうかはあなたの選択ですが、それを知っておく必要があります。ですから、貴重な時間を数分間使ってください。

クラスがとても良いのはなぜですかDate?そのシンプルさ。

このDateクラスは、日付と時刻の情報を1970 年 1 月 1 日から経過したミリ秒数として保存します。これは大量のミリ秒であるため、このlong型を使用してそれらを保存します。

面白い。

なぜ1970年以降なのか?これはいわゆるUnix 時間です。これは、現代のすべてのオペレーティング システムの祖先である Unix オペレーティング システムが時間を管理する方法です。

しかし、2 つの日付の間の経過時間を非常に簡単に知ることができます。一方の日付からもう一方の日付を引くだけで、日付間の時差が最も近いミリ秒単位で得られます。

以下に、クラスを使用した便利な例をいくつか示しますDate


2. 現在の日付を取得する

現在の時刻と日付を取得するには、Dateオブジェクトを作成するだけです。新しいオブジェクトはそれぞれ、作成された時刻を保存します。とてもシンプルに見えます:

Date current = new Date();

このコマンドを実行すると、current変数には作成されたオブジェクトへの参照が保存されDate、その作成時刻 (1970 年 1 月 1 日から経過したミリ秒数) が内部的に保存されます。

現在の日付を画面に表示する

現在の日付を表示するには、次の手順を実行します。 a) 新しいDateオブジェクトを作成し、 b) メソッドを使用してそれを画面に出力しますSystem.out.println()

例:

コード コンソール出力
Date current = new Date();
System.out.println(current);
Thu Feb 21 14:01:34 EET 2019

コンソール出力の意味は次のとおりです。

文章 解釈
木曜_ 木曜日
2月21日 2月21日
14:01:34 時:分:秒
EET タイムゾーン: 東ヨーロッパ時間
2019年

3. 特定の日付を設定する

現在時刻を取得する方法はわかりましたが、Date別の日付または時刻を格納するオブジェクトを作成するにはどうすればよいでしょうか?

繰り返しますが、ここではすべてがシンプルです。特定の日付を設定するには、次のようなコードを記述する必要があります。

Date birthday = new Date(year, month, day);

すべてはシンプルで明白ですが、注意すべきニュアンスが 2 つあります。

  1. その年は 1900 年から数えなければなりません。
  2. 月は 0 から番号が付けられます。
面白い。

これは Unix オペレーティング システムのもう 1 つの遺産です。Unix では、プログラマーは 2 桁を使用して年を表していました。1977 年の代わりに、単に 77 と書きました。つまり、1900 年から数えると 77 が正しい年になります。

たとえば、私は 1989 年 3 月 21 日に生まれました。3 月は 3 番目の月なので、次のように書く必要があります。

コード コンソール出力
Date current = new Date(89, 2, 21);
System.out.println(current);
Tue Mar 21 00:00:00 EET 1989

月は 0 から数えられますが、日は 0 から数えられません。 それは少し奇妙ですよね。

私たちは、真のプログラマーであれば、優先して月の日数もゼロから番号を付けるべきだったと考えています。ああ、この適合主義者たち 🙂

特定の時間を設定する

特定の時刻を設定することも非常に簡単です。このためには、次のようなステートメントを記述する必要があります。

Date birthday = new Date(year, month, day, hour, minutes, seconds);

時、分、秒は 0 から数えられます。あなたの中のプログラマーは安堵のため息をつきます。

例:

コード コンソール出力
Date current = new Date(105, 5, 4, 12, 15, 0);
System.out.println(current);
Sat Jun 04 12:15:00 EEST 2005

時刻を12:15、日付を2005 年 6 月 4 日と設定しました。これはプログラマーではない人にとっては少し読みにくいですが、正常に動作します。


4. 日付の要素の操作

オブジェクトを表示するだけでなく、さまざまな操作が可能ですDate。これには、内部に保存された日付の個々の要素を取得できるメソッドがあります。

方法 説明
int getYear()
1900 年を基準とした日付の年を返します。
int getMonth()
日付の月を返します (月は 0 から番号付けされます)
int getDate()
月の日を返します
int getDay()
曜日を返します
int getHours()
時間を返します
int getMinutes()
分を返します
int getSeconds()
秒を返します

例:

コード コンソール出力 ノート
Date current = new Date(105, 5, 4, 12, 15, 0);
System.out.println(current.getYear());
System.out.println(current.getMonth());
System.out.println(current.getDate());
System.out.println(current.getDay());

105
5
4
6

2005 年
6 月

土曜日

ちなみに、Dateオブジェクトを使用すると、日付の個々の要素を取得できるだけでなく、変更することもできます。

方法 説明
void setYear(int year) 日付の年を変更します。年は 1900 年を基準にして示されています。
void setMonth(int month) 日付の月を変更します(月は0から番号付けされます)
void setDate(int date) 月の日が変わります
void setHours(int hours) 営業時間を変更します
void setMinutes(int minutes) 変更分
void setSeconds(int seconds) 秒数を変更します

5.ミリ秒

前に述べたように、このDateオブジェクトには 1970 年 1 月 1 日から経過したミリ秒数が保存されます。

その番号が必要な場合は、オブジェクトから取得できますDate

long time = date.getTime();

このgetTime()メソッドは、オブジェクト内に格納されているミリ秒数を返しますDate

ミリ秒数を取得できるだけでなく、既存のオブジェクトでその数値を変更することもできます。

Date date = new Date();
date.setTime(1117876500000L);

ちなみに、オブジェクトのDate作成時にすぐにオブジェクトに時間を渡すことで、これをさらに簡潔に書くことができます。

Date date = new Date(1117876500000L);

6. 日付の比較

2 つの日付を比較してどちらが先かを知りたい場合、3 つのオプションがあります。

1 つ目の方法は、それぞれが保存するミリ秒数を単純に比較することです。

if (date1.getTime() < date2.getTime())

2 番目の方法before()は、オブジェクトのメソッドを使用することですDate

if (date1.before(date2))

これは次のようになります: if がdate1の前にある場合はdate2...

3番目の方法after()は、オブジェクトのメソッドを使用することですDate

if (date2.after(date1))

これは次のようになります: ifdate2が の後にある場合date1、...


7.DateFormatクラス

画面に日付を表​​示すると、次のような表示になったことを思い出してくださいThu Feb 21 14:01:34 EET 2019。すべてが正しいように見えますが、この形式は、通常の人間ではなくプログラマーにとって日付が表示される方法と同じです。ユーザーに対して日付をより明確に表示したいと考えています。のようなものTuesday, February 21

しかも年なしで。必要に応じて、1 年を追加することもできます。一般に、日付をさまざまな方法で表示できるようにしたいと考えています。

これには特別なクラスがあります: SimpleDateFormat

例:

コード
Date current = new Date(105, 5, 4, 12, 15, 0);
SimpleDateFormat formatter = new SimpleDateFormat("MMM-dd-YYYY");
String message = formatter.format(current);
System.out.println(message);
コンソール出力
Jun-04-2005

プログラムが表示した内容を見てくださいJun-04-2005。それは以前とはまったく異なります。

違いは、オブジェクト自体ではなく、オブジェクトのメソッドDateを呼び出して取得した特別な文字列を表示したことです。しかし、それはここでの主要なポイントですらない。format()SimpleDateFormat

オブジェクトの作成時にSimpleDateFormat、文字列を"MMM-dd-YYYY"パラメータとして渡しました。この文字列は、最終的にコンソール出力に表示される日付形式を伝えます。

  • MMM は、月の名前を 3 文字で省略して表示することを示します。
  • dd は、日付を表示することを示します
  • YYYYは年を4桁で表示することを示します

月を数値として出力したい場合は、 の代わりに とMMM書く必要がありMM、これによりパターンが得られます"MM-dd-YYYY"。画面出力は次のようになります06-04-2005

このクラスについては後ほど詳しく説明します。


8.Date.parse方法

このDateクラスは、文字列から日付を取得するなど、他にも興味深い便利な機能を実行できます。あるいは、プログラマが言うように、文字列を解析することもできます。

これには特別な方法がありますparse()。解析は次のようになります。

Date date = new Date();
date.setTime( Date.parse("Jul 06 12:15:00 2019") );

ちなみに、このコードはもっとコンパクトに書くことができます。

Date date = new Date("Jul 06 12:15:00 2019");

文字列の解析については、他のレッスンで詳しく検討します。