1. 日時 API の紹介
Java の作成者は、Date クラスと Calendar クラスの状況を好みませんでした。彼らは当時はよかったですが、時代は変わります。そして、シンプルで強力かつ信頼できるものが必要になりました。そして、Java 8 のリリース (Calendar
登場から 15 年後) で、Java Date Time APIが導入されました。これは、時間を扱うあらゆるタスクを解決できる一連のクラスです。
クラスが非常に多かったので、いくつかのパッケージに分割されました。
このパッケージは Java Date Time API の基本パッケージであり、、 、、、、 などjava.time
のクラスが含まれています。これらのクラスのオブジェクトはすべて です。つまり、作成後に変更することはできません。LocalDate
LocalTime
LocalDateTime
Instant
Period
Duration
immutable
パッケージjava.time.format
には、時刻の書式設定、つまり時刻 (および日付) を文字列に変換したり、その逆を変換したりするためのクラスが含まれています。たとえば、クラスDateTimeFormatter
を置き換える汎用クラスが含まれていますSimpleDateFormat
。
パッケージjava.time.zone
には、タイムゾーンを操作するためのクラスが含まれています。TimeZone
や などのクラスが含まれていますZonedDateTime
。世界のさまざまな場所にあるクライアント用のサーバー コードを作成する場合、これらのクラスが実際に必要になります。
2.LocalDate
クラス
最初に説明する Date Time API の最も便利なクラスは、クラスですLocalDate
。おそらく名前から推測できるように、このクラスは日付を操作するように設計されています。
このクラスのオブジェクトは作成後に変更されません。つまり、LocalDate
クラスは不変です。ただし、このプロパティにより、クラスに単純さと信頼性が追加されます。特に、複数のスレッド (実行スレッド) が同時にそのようなオブジェクトと対話している場合はそうです。
新しいLocalDate
オブジェクトを作成するには、静的メソッドのいずれかを使用する必要があります。ここでは主なもののリストを示します。
現在の日付を取得する
現在の日付を取得するには、静的now()
メソッドを使用する必要があります。これは見た目よりもはるかに簡単です。
LocalDate today = LocalDate.now();
ここで、today
はLocalDate
変数、 はクラスのLocalDate.now()
静的メソッドの呼び出しです。now()
LocalDate
例:
コード | コンソール出力 |
---|---|
|
|
特定のタイムゾーンの日付を取得する
このクラスには、特定のタイム ゾーンの現在の日付を取得できるメソッドLocalDate
のバリエーションもあります。now(ZoneId)
ZoneId
これを行うには、別のクラス、クラス (java.time.ZoneId)が必要です。タイムゾーンの名前を指定してオブジェクトof()
を返すメソッドがあります。ZoneId
上海の現在の日付を確認するには、次のコードを記述する必要があります。
コード | コンソール出力 |
---|---|
|
|
すべてのタイムゾーンの名前のリストはインターネット上で見つけることができます。
3. 特定の日付を取得する
特定の日付を表すオブジェクトを取得するにはLocalDate
、静的メソッドを使用する必要がありますof()
。ここにあるものはすべて非常にシンプルかつ明確です。
LocalDate date = LocalDate.of(2019, Month.FEBRUARY, 22);
ここで、date
はLocalDate
変数、 はクラスの静的メソッドの呼び出しです。LocalDate.of()
of()
LocalDate
ここでは、 2 月を月として指定するためにクラスFEBRUARY
の定数(java.time.Month) が使用されていることがわかります。Month
昔ながらの方法 (数値を使用) で月を指定することもできます。
LocalDate date = LocalDate.of(2019, 2, 22);
二?2月の代わりに?ということは、また月が1から数えられることになるのでしょうか?
そうです、Java の作成から 20 年近くが経ち、ついに月が 0 から数えられなくなりました。
例:
コード | コンソール出力 |
---|---|
|
|
その日のインデックスから日付を取得する
日付を作成するもう 1 つの興味深い方法があります。このofYearDay
メソッドを使用すると、年の番号とその年の日のインデックスのみに基づいて日付を取得できます。一般的な外観は次のとおりです。
LocalDate date = LocalDate.ofYearDay(year, day);
ここでyear
、 は年の番号、day
はその年の日のインデックスです。
例:
コード | コンソール出力 |
---|---|
|
|
2019年の100日目は4月10日です。
Unix の日付を取得する
Date
1970 年 1 月 1 日以来、オブジェクトは常に時間をミリ秒数として保存していたことを覚えていますか? プログラマが古き良き時代を懐かしまないように、このLocalDate
クラスにはofEpochDay()
1970 年 1 月 1 日から計算された日付を返すメソッドが追加されました。全体的な外観は次のとおりです。
LocalDate date = LocalDate.ofEpochDay(day);
ここで、day
は 1970 年 1 月 1 日から経過した日数です。
例:
コード | コンソール出力 |
---|---|
|
|
4. 日付の要素を取得する
オブジェクトを変更することはできませんLocalDate
が、保存された日付の個々の要素を取得することはできます。LocalDate
オブジェクトにはこれを行うためのメソッドがいくつかあります。
方法 | 説明 |
---|---|
|
特定の日付の年を返します |
|
日付の月を返します: いくつかの定数のうちの 1 つJANUARY, FEBRUARY, ...; |
|
日付の月のインデックスを返します。1月 == 1. |
|
月の日のインデックスを返します |
|
年の初めからのその日のインデックスを返します |
|
曜日を返します: いくつかの定数のうちの 1 つMONDAY, TUESDAY, ...; |
|
元号を返します: BCE (現在の元号以前) またはCE (現在の元号) |
例:
コード | コンソール出力 |
---|---|
|
|
LocalDate
5.オブジェクト内の日付を変更する
このLocalDate
クラスには、日付を操作できるメソッドがいくつか含まれています。これらのメソッドの実装はクラスのメソッドに似ていますString
。既存のオブジェクトは変更されませんLocalDate
が、代わりに必要なデータを含む新しいオブジェクトが返されます。
クラスのメソッドは次のとおりですLocalDate
。
方法 | 説明 |
---|---|
|
指定した日数を日付に加算します |
|
日付に週を追加します |
|
日付に月を加算します |
|
日付に年を加算します |
|
日付から日数を減算します |
|
日付から週を減算します |
|
日付から月を減算します |
|
日付から年を減算します |
例:
コード | コンソール出力 |
---|---|
|
|
birthday object
呼び出すメソッドは変わりません。代わりに、そのメソッドは、必要なデータを含む新しいオブジェクトを返します。
GO TO FULL VERSION