また、これら 3 つのクラスにはタイム ゾーン関連の情報がないこともわかりましたが、タイム ゾーンを処理しないとは言えず、タイム ゾーンの処理を選択的に非表示にしていると言えます。内部的には、オペレーティング システムの現在のタイム ゾーンを使用します。
同時に、Java は、タイムゾーンに注意する必要がある日付と時刻の API を処理するための java.time
パッケージ内にいくつかのクラスも提供します。それらは、java.time.ZonedDateTime
と java.time.ZoneId
です。前者はタイム ゾーンを必要とする日時を処理するために使用され、後者はタイム ゾーンを処理するために使用されます。
ZonedDateTime
は LocalDateTime
に似ており、ほぼ同じ API を持っています。ある意味、ZonedLocalTime
は、タイム ゾーン情報が渡されない場合、デフォルトでオペレーティング システムのタイム ゾーンになるため、結果は実際には LocalDateTime
と同様になります。
たとえば、ZonedDateTime
の now()
メソッドを使用して、現在のタイム ゾーン (オペレーティング システムのタイム ゾーン) の日付と時刻を返し、次のメソッドを呼び出すことができます。 parse()
このメソッドは、タイムゾーン情報を含む文字列形式の日付と時刻を ZonedDateTime インスタンスに変換できます。
import java.time.ZonedDateTime; public class Java8Tester { public static void main(String args[]) { Java8Tester tester = new Java8Tester(); tester.run(); } public void run() { ZonedDateTime now = ZonedDateTime.now(); System.out.println("当前日期时间是:" + now); ZonedDateTime datetime = ZonedDateTime.parse("2012-10-10T21:58:00+08:00"); System.out.println("日期时间是:" + datetime); } }
実行結果は次のとおりです
現在の日時は: 2018-10-08T22:21:56.806597 08:00 [アジア/上海] 日付と時刻は次のとおりです: 2012-10-10T21:58 08:00
ZonedDateTime
オブジェクトの toLocalDate()# を呼び出すこともできます。 ## および
toLocalTime () このメソッドは、インスタンスのローカル日時を取得します。
import java.time.LocalTime; import java.time.LocalDate; import java.time.ZonedDateTime; public class Java8Tester { public static void main(String args[]) { Java8Tester tester = new Java8Tester(); tester.run(); } public void run() { ZonedDateTime now = ZonedDateTime.now(); System.out.println("当前日期时间是:" + now); LocalDate date = now.toLocalDate(); System.out.println("本地日期是:" + now); LocalTime time = now.toLocalTime(); System.out.println("本地时间是:" + time); } }実行結果は次のとおりです。
現在の日付と時間は: 2022-10-08T22:28: 10.389487 08:00[アジア/上海] 現地の日付は: 2022-10-08T22:28:10.389487 08:00[アジア/上海] 現地時間は: 22:28 :10.389487追伸 戻り値が奇妙ですが、
toLocalDate() はなぜ時間も返すのでしょうか?
ZoneId クラスを使用して処理できます。
ZoneId クラスの静的メソッド
systemDefault() を呼び出して、現在のタイム ゾーンを返すことができます。
import java.time.ZonedDateTime; import java.time.ZoneId; public class Java8Tester { public static void main(String args[]) { Java8Tester tester = new Java8Tester(); tester.run(); } public void run() { ZoneId currentZone = ZoneId.systemDefault(); System.out.println("当前时区是: " + currentZone); } }実行結果は次のとおりです
現在のタイムゾーンは次のとおりです: Asia/Shanghai
ZonedDateTime# を呼び出すこともできます。 ##instancegetZone()
インスタンスが存在するタイムゾーンを取得するメソッド<pre class="brush:java;">import java.time.ZonedDateTime;
import java.time.ZoneId;
public class Java8Tester {
public static void main(String args[]) {
Java8Tester tester = new Java8Tester();
tester.run();
}
public void run() {
ZonedDateTime now = ZonedDateTime.now();
System.out.println("当前时区是: " + now.getZone());
}
}</pre>
実行結果は以下の通りです
以上がJava8でタイムゾーンの日付と時刻を扱う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。