1. ZonedDateTime
lớp học
Có một lớp rất thú vị khác trong API Ngày Giờ: lớp ZonedDateTime
. Mục đích chính của nó là giúp thuận tiện khi làm việc với các ngày ở các múi giờ khác nhau.
LocalDate
là tuyệt vời để đại diện cho ngày. Ví dụ, sinh nhật. Sinh nhật của tôi là ngày 15 tháng 3 bất kể tôi ở đâu. Đây là một ví dụ về một ngày.
LocalTime
thật tuyệt khi mô tả thời gian, giống như thời gian được đặt trên đồng hồ báo thức: Tôi đặt báo thức lúc 5 giờ sáng và tôi đang ở đâu không quan trọng. 5 giờ sáng là 5 giờ sáng. Đây là một ví dụ về làm việc với thời gian.
Bây giờ, giả sử rằng chúng ta đang viết một ứng dụng đặt chuyến bay. Máy bay cất cánh và đến theo giờ địa phương. Máy bay ở trên không trong một thời gian cố định, nhưng múi giờ có thể thay đổi.
Múi giờ
Nhân tiện, múi giờ thực sự là một mớ hỗn độn. Và nếu bạn nghĩ rằng có 24 múi giờ thì bạn đã nhầm to.
Ví dụ: thời gian ở Ấn Độ khác với Giờ chuẩn Greenwich năm tiếng rưỡi: GMT+5:30
. Một số quốc gia chuyển sang thời gian tiết kiệm ánh sáng ban ngày và những quốc gia khác thì không. Hơn nữa, các quốc gia khác nhau chuyển sang thời gian mùa hè vào những thời điểm khác nhau trong năm.
Và một số quốc gia thông qua luật hủy bỏ thời gian tiết kiệm ánh sáng ban ngày hoặc giới thiệu lại hoặc hủy bỏ nó một lần nữa.
Trong mọi trường hợp, thế giới có các múi giờ và trong mỗi múi giờ có một thời gian. Thời gian ở các khu vực khác nhau có thể trùng nhau trong các khoảng thời gian nhất định trong năm và sau đó khác nhau trong các khoảng thời gian khác. Các múi giờ thường được đặt tên theo các thành phố lớn nằm trong đó: Europe/Monaco
, Asia/Singapore
, nhưng cũng có những trường hợp ngoại lệ — US/Pacific
.
Chính thức, có 599 múi giờ vào lúc này. Hãy suy nghĩ về nó: 599. Đó là xa 24. Chào mừng đến với thế giới toàn cầu.
Lớp ZoneId
từ java.time
gói được sử dụng để lưu trữ múi giờ trong Java.
Nhân tiện, nó có một getAvailableZoneIds()
phương thức tĩnh, trả về tập hợp tất cả các múi giờ hiện đã biết. Để có danh sách tất cả các vùng, bạn cần viết đoạn mã sau:
Mã số | Đầu ra bảng điều khiển (một phần) |
---|---|
|
|
Để lấy một ZoneId
đối tượng theo tên của nó, bạn cần sử dụng of()
phương thức tĩnh;
Mã số | Ghi chú |
---|---|
|
|
2. Tạo ZonedDateTime
đối tượng
Khi tạo một ZonedDateTime
đối tượng, bạn cần gọi now()
phương thức tĩnh của lớp và truyền một ZoneId
đối tượng cho nó.
Mã số | Đầu ra bảng điều khiển |
---|---|
|
|
Nếu bạn không truyền ZoneId
đối tượng vào now()
phương thức (và điều đó được cho phép), thì múi giờ sẽ được xác định tự động dựa trên cài đặt của máy tính đang chạy chương trình.
Ví dụ:
Mã số | Đầu ra bảng điều khiển |
---|---|
|
|
Chuyển đổi ngày toàn cầu thành ngày địa phương
Một trong những tính năng thú vị của ZonedDateTime
nó là khả năng chuyển đổi sang ngày giờ địa phương. Ví dụ:
ZoneId zone = ZoneId.of("Africa/Cairo");
ZonedDateTime cairoTime = ZonedDateTime.now(zone);
LocalDate localDate = cairoTime.toLocalDate();
LocalTime localTime = cairoTime.toLocalTime();
LocalDateTime localDateTime = cairoTime.toLocalDateTime();
3. Làm việc với thời gian
Giống như LocalDateTime
lớp, ZonedDateTime
lớp có nhiều cách để lấy các phần tử riêng lẻ của ngày và giờ. Dưới đây là danh sách các phương pháp này:
|
Trả về năm của một ngày cụ thể |
|
Trả về tháng của ngày: một trong nhiều hằng số —JANUARY, FEBRUARY, ...; |
|
Trả về chỉ số tháng của ngày. tháng 1 == 1 |
|
Trả về chỉ số của ngày trong tháng |
|
Trả về ngày trong tuần: một trong nhiều hằng số —MONDAY, TUESDAY, ...; |
|
Trả về chỉ số của ngày trong năm |
|
Trả về giờ |
|
Trả về số phút |
|
Trả về giây |
|
Trả về nano giây |
Tất cả các phương thức hoàn toàn tương tự với các phương thức của lớp LocalDateTime
. Và, tất nhiên, ZonedDateTime
lớp có các phương thức cho phép bạn làm việc với ngày và giờ. Điều đó nói rằng, đối tượng mà các phương thức được gọi không thay đổi. Thay vào đó, chúng trả về một ZonedDateTime
đối tượng mới:
phương pháp | Sự miêu tả |
---|---|
|
Thêm năm vào ngày |
|
Thêm tháng vào ngày |
|
Thêm ngày vào ngày |
|
Thêm giờ |
|
Thêm phút |
|
Thêm giây |
|
Thêm nano giây |
|
Trừ năm kể từ ngày |
|
Trừ tháng kể từ ngày |
|
Trừ ngày kể từ ngày |
|
trừ giờ |
|
trừ phút |
|
Trừ giây |
|
Trừ đi nano giây |
Chúng tôi sẽ không cung cấp bất kỳ ví dụ nào, vì chúng tôi nghĩ rằng mọi thứ ở đây đều rõ ràng bằng cách tương tự với các lớp mà chúng tôi vừa xem xét.
GO TO FULL VERSION