Mục lục
ZonedDateTime được giới thiệu trong java 8 đại diện cho kiểu dữ liệu Date & Time với múi giờ cụ thể. ZonedDateTime lưu các tất cả các trường dữ liệu của date & time đến độ chính xác là nano giây.
Sử dụng ZonedDateTime để giao tiếp với nhau giữa các nhau khác múi giờ. Ví dụ như bạn sẽ chỉ ra thời gian cụ thể tại nơi bạn để hẹn gặp họ.
Note: ZonedDateTime object là immutable.
Khởi tạo ZonedDateTime
Thông thường chúng ta khởi tạo ZonedDateTime object bằng 2 method chính là ZonedDateTime.now() và ZonedDateTime.of().
now()
ZonedDateTime now = ZonedDateTime.now(); ZonedDateTime now = ZonedDateTime.now( ZoneId.of("GMT+05:30") ); //Time in IST
of()
//1 - All date parts are inplace ZoneId zoneId = ZoneId.of("UTC+1"); ZonedDateTime zonedDateTime1 = ZonedDateTime.of(2020, 1, 4, 23, 45, 59, 1234, zoneId); //========= //2 - Using existing local date and time values LocalDate localDate = LocalDate.of(2019, 03, 12); LocalTime localTime = LocalTime.of(12, 44); ZoneId zoneId = ZoneId.of("GMT+05:30"); ZonedDateTime timeStamp = ZonedDateTime.of( localDate, localTime, zoneId );
Convert String sang ZonedDateTime
Trong ZonedDateTime sử dụng method parse() để convert string thành ZonedDateTime object.
//1 - default pattern String timeStamp = "2019-03-27T10:15:30"; ZonedDateTime localTimeObj = ZonedDateTime.parse(time); //2 - specified pattern DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss a"); String timeStamp1 = "2019-03-27 10:15:30 AM"; ZonedDateTime localTimeObj1 = ZonedDateTime.parse(timeStamp1, formatter);
Convert ZonedDateTime sang String
Sử dụng format() method để convert ZonedDateTime object sang String với định dạng được chỉ định.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss a"); ZonedDateTime now = ZonedDateTime.now(); String dateTimeString = now.format(formatter); // 2020-01-06 23:57:59 PM
Modify ZonedDateTime
ZonedDateTime object cung cấp cho chúng ta các method với tiền tố là plusX() và minusY() để cập nhật gía trị của ZonedDateTime object.
- plusYears()
- plusMonths()
- plusDays()
- plusHours()
- plusMinutes()
- plusSeconds()
- plusNanos()
- minusYears()
- minusMonths()
- minusDays()
- minusHours()
- minusMinutes()
- minusSeconds()
- minusNanos()
ZonedDateTime now = ZonedDateTime.now(); //3 hours later ZonedDateTime zonedDateTime1 = now.plusHours(3); //3 minutes earliar ZonedDateTime zonedDateTime2 = now.minusMinutes(3); //Next year same time ZonedDateTime zonedDateTime2 = now.plusYears(1); //Last year same time ZonedDateTime zonedDateTime2 = now.minusYears(1);