또한 이 세 가지 클래스에는 시간대 관련 정보가 없지만 시간대를 처리하지 않는다고 할 수는 없으며 선택적으로 시간대 처리를 숨긴다는 사실도 발견했습니다. 내부적으로는 운영 체제의 현재 시간대를 사용합니다.
동시에 Java는 시간대에 주의가 필요한 날짜 및 시간 API를 처리하기 위해 java.time
패키지에 여러 클래스도 제공합니다. java.time.ZonedDateTime
및 java.time.ZoneId
입니다. 전자는 시간대가 필요한 날짜/시간을 처리하는 데 사용되고 후자는 시간대를 처리하는 데 사용됩니다. java.time
包中也提供了几个类用于处理需要关注时区的日期时间 API。它们是 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[Asia/Shanghai] 日期时间是: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[Asia/Shanghai] 本地日期是:2022-10-08T22:28:10.389487+08:00[Asia/Shanghai] 本地时间是:22:28:10.389487
P.S 这个返回值好诡异,为啥 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
实例的 getZone()
ZonedDateTime
은 LocalDateTime
과 유사하며 API도 거의 동일합니다. 어떤 면에서는 시간대 정보가 전달되지 않으면 ZonedLocalTime
은 기본적으로 운영 체제의 시간대로 설정되므로 결과는 LocalDateTime
과 유사합니다. 예를 들어 ZonedDateTime
의 now()
메서드를 사용하여 현재 시간대(운영 체제 시간대)의 날짜와 시간을 반환하고 parse()
메소드는 시간대 정보를 포함하는 문자열 형식의 날짜 및 시간을 ZonedDateTime 인스턴스로 변환할 수 있습니다. 🎜현재 날짜 및 시간은 2018-10-08T22:21:56.806597+08:00[Asia/Shanghai] 날짜 및 시간입니다. 시간은: 2012-10- 10T21:58+08:00🎜🎜🎜Java8Tester.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()); } }실행 결과는 다음과 같습니다
ZonedDateTime
객체의 toLocalDate()
및 toLocalTime()을 호출할 수도 있습니다. code> 인스턴스를 얻는 방법 현지 날짜 및 시간으로 변환🎜rrreee🎜실행 결과는 다음과 같습니다🎜🎜🎜현재 날짜 및 시간은 2022-10-08T22:28:10.389487+08:00[Asia/Shanghai ] 현지 날짜: 2022-10-08T22: 28:10.389487+08:00[Asia/Shanghai] 현지 시간: 22:28:10.389487🎜🎜🎜P.S 이 반환 값은 왜 그렇게 이상합니까? toLocalDate()
가 시간을 반환합니까? 🎜ZoneId
클래스를 사용하여 처리할 수 있습니다. 🎜🎜예를 들어 ZoneId
클래스의 정적 메서드 systemDefault()
를 호출하여 현재 시간대를 반환할 수 있습니다. 🎜rrreee🎜실행 결과는 다음과 같습니다🎜🎜🎜현재 시간대는 Asia/Shanghai🎜🎜🎜ZonedDateTime
의 getZone()
메서드를 호출할 수도 있습니다. 인스턴스가 위치한 시간대를 가져옵니다🎜 rrreee🎜실행 결과는 다음과 같습니다🎜🎜🎜현재 시간대는 Asia/Shanghai🎜🎜입니다.위 내용은 Java8에서 시간대 날짜 및 시간을 처리하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!