Saya juga mendapati bahawa ketiga-tiga kelas ini tidak mempunyai sebarang maklumat berkaitan zon waktu, tetapi tidak boleh dikatakan bahawa mereka tidak mengendalikan zon waktu, tetapi mereka secara selektif menyembunyikan pemprosesan zon waktu. Secara dalaman mereka menggunakan zon waktu semasa sistem pengendalian.
Pada masa yang sama, Java juga menyediakan beberapa kelas dalam pakej java.time
untuk mengendalikan API tarikh dan masa yang memerlukan perhatian pada zon waktu. Mereka ialah java.time.ZonedDateTime
dan java.time.ZoneId
. Yang pertama digunakan untuk mengendalikan waktu tarikh yang memerlukan zon waktu, dan yang terakhir digunakan untuk mengendalikan zon waktu.
ZonedDateTime
serupa dengan LocalDateTime
dan mempunyai API yang hampir sama. Dalam beberapa cara, ZonedLocalTime
akan lalai ke zon waktu sistem pengendalian jika tiada maklumat zon waktu dihantar, jadi hasilnya serupa dengan LocalDateTime
.
Sebagai contoh, kita boleh menggunakan kaedah ZonedDateTime
now()
untuk mengembalikan tarikh dan masa dalam zon waktu semasa (zon waktu sistem pengendalian, kaedah parse()
boleh mengembalikan tarikh dan masa dalam format rentetan yang mengandungi maklumat zon waktu Tukar kepada contoh 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); } }
Keputusan berjalan adalah seperti berikut
Tarikh dan masa semasa ialah: 2018-10-08T22:21:56.806597+08: 00[Asia/Shanghai ] Tarikh dan masa ialah: 2012-10-10T21:58+08:00
Kami juga boleh memanggil kaedah ZonedDateTime
dan toLocalDate()
bagi toLocalTime()
objek untuk menukar contoh yang diperoleh kepada setempat Tarikh dan masa
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); } }
adalah seperti berikut
Tarikh dan masa semasa ialah: 2022-10-08T22:28:10.389487+08 :00[Asia/Shanghai] Tarikh tempatan ialah: 2022-10-08T22:28:10.389487+08:00[Asia/Shanghai] Waktu tempatan ialah: 22:28:10.389487
P.S. Nilai pulangan ini sangat pelik, mengapa toLocalDate()
dikembalikan?
Maklumat berkaitan zon waktu, kita boleh menggunakan kelas ZoneId
untuk mengendalikannya.
Sebagai contoh, anda boleh memanggil kaedah statik ZoneId
kelas systemDefault()
untuk mengembalikan zon waktu semasa.
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); } }
Keputusan larian adalah seperti berikut
Zon waktu semasa ialah: Asia/Shanghai
Kita juga boleh memanggil kaedah ZonedDateTime
untuk contoh getZone()
untuk mendapatkan contoh Zon waktu
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()); } }
Keputusan larian adalah seperti berikut
Zon waktu semasa ialah: Asia/Shanghai
Atas ialah kandungan terperinci Bagaimana untuk mengendalikan tarikh dan masa zon masa dalam Java8. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!