ホームページ  >  記事  >  Java  >  Java8でタイムゾーンの日付と時刻を扱う方法

Java8でタイムゾーンの日付と時刻を扱う方法

WBOY
WBOY転載
2023-05-09 16:49:081465ブラウズ

また、これら 3 つのクラスにはタイム ゾーン関連の情報がないこともわかりましたが、タイム ゾーンを処理しないとは言えず、タイム ゾーンの処理を選択的に非表示にしていると言えます。内部的には、オペレーティング システムの現在のタイム ゾーンを使用します。

同時に、Java は、タイムゾーンに注意する必要がある日付と時刻の API を処理するための java.time パッケージ内にいくつかのクラスも提供します。それらは、java.time.ZonedDateTimejava.time.ZoneId です。前者はタイム ゾーンを必要とする日時を処理するために使用され、後者はタイム ゾーンを処理するために使用されます。

ZonedDateTimeLocalDateTime に似ており、ほぼ同じ API を持っています。ある意味、ZonedLocalTime は、タイム ゾーン情報が渡されない場合、デフォルトでオペレーティング システムのタイム ゾーンになるため、結果は実際には LocalDateTime と同様になります。

たとえば、ZonedDateTimenow() メソッドを使用して、現在のタイム ゾーン (オペレーティング システムのタイム ゾーン) の日付と時刻を返し、次のメソッドを呼び出すことができます。 parse() このメソッドは、タイムゾーン情報を含む文字列形式の日付と時刻を ZonedDateTime インスタンスに変換できます。

Java8Tester.java

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(&quot;当前时区是: &quot; + now.getZone()); } }</pre>実行結果は以下の通りです

現在のタイムゾーンは: アジア/上海

以上がJava8でタイムゾーンの日付と時刻を扱う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。