1.Date
クラスとUnix時間
Java の最初の頃から、この言語には時刻と日付を扱うための特別なクラスがありました — Date
。Date
時間の経過とともに、日付を操作するためのクラスがさらにいくつか登場しましたが、プログラマーは今でもこのクラスを使用し続けています。
それは非常に簡単で便利だからです。プログラマーであれば、実際のプロジェクトで必ず遭遇するでしょう。それを使用するかどうかはあなたの選択ですが、それを知っておく必要があります。ですから、貴重な時間を数分間使ってください。
クラスがとても良いのはなぜですか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()
。
例:
コード | コンソール出力 |
---|---|
|
|
コンソール出力の意味は次のとおりです。
文章 | 解釈 |
---|---|
木曜_ | 木曜日 |
2月21日 | 2月21日 |
14:01:34 | 時:分:秒 |
EET | タイムゾーン: 東ヨーロッパ時間 |
2019年 | 年 |
3. 特定の日付を設定する
現在時刻を取得する方法はわかりましたが、Date
別の日付または時刻を格納するオブジェクトを作成するにはどうすればよいでしょうか?
繰り返しますが、ここではすべてがシンプルです。特定の日付を設定するには、次のようなコードを記述する必要があります。
Date birthday = new Date(year, month, day);
すべてはシンプルで明白ですが、注意すべきニュアンスが 2 つあります。
- その年は 1900 年から数えなければなりません。
- 月は 0 から番号が付けられます。
これは Unix オペレーティング システムのもう 1 つの遺産です。Unix では、プログラマーは 2 桁を使用して年を表していました。1977 年の代わりに、単に 77 と書きました。つまり、1900 年から数えると 77 が正しい年になります。
たとえば、私は 1989 年 3 月 21 日に生まれました。3 月は 3 番目の月なので、次のように書く必要があります。
コード | コンソール出力 |
---|---|
|
|
月は 0 から数えられますが、日は 0 から数えられません。 それは少し奇妙ですよね。
私たちは、真のプログラマーであれば、優先して月の日数もゼロから番号を付けるべきだったと考えています。ああ、この適合主義者たち 🙂
特定の時間を設定する
特定の時刻を設定することも非常に簡単です。このためには、次のようなステートメントを記述する必要があります。
Date birthday = new Date(year, month, day, hour, minutes, seconds);
時、分、秒は 0 から数えられます。あなたの中のプログラマーは安堵のため息をつきます。
例:
コード | コンソール出力 |
---|---|
|
|
時刻を12:15、日付を2005 年 6 月 4 日と設定しました。これはプログラマーではない人にとっては少し読みにくいですが、正常に動作します。
4. 日付の要素の操作
オブジェクトを表示するだけでなく、さまざまな操作が可能ですDate
。これには、内部に保存された日付の個々の要素を取得できるメソッドがあります。
方法 | 説明 |
---|---|
|
1900 年を基準とした日付の年を返します。 |
|
日付の月を返します (月は 0 から番号付けされます) |
|
月の日を返します |
|
曜日を返します |
|
時間を返します |
|
分を返します |
|
秒を返します |
例:
コード | コンソール出力 | ノート |
---|---|---|
|
|
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
。
例:
コード |
---|
|
コンソール出力 |
|
プログラムが表示した内容を見てください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");
文字列の解析については、他のレッスンで詳しく検討します。
GO TO FULL VERSION