Đã đến lúc cho câu trả lời hiện đại.
java.time và ThreeTenABP
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("d/M/u");
String validUntil = "1/1/1990";
LocalDate validDate = LocalDate.parse(validUntil, dateFormatter);
LocalDate currentDate = LocalDate.now(ZoneId.of("Pacific/Efate"));
if (currentDate.isAfter(validDate)) {
System.out.println("Catalog is outdated");
}
Khi tôi chạy mã này ngay bây giờ, đầu ra là:
Danh mục đã lỗi thời
Vì nó không bao giờ trùng ngày trong tất cả các múi giờ, hãy cung cấp múi giờ rõ ràng cho LocalDate.now. Nếu bạn muốn danh mục hết hạn đồng thời ở tất cả các múi giờ, bạn có thể cung cấp ZoneOffset.UTCmiễn là bạn thông báo cho người dùng rằng bạn đang sử dụng UTC.
Tôi đang sử dụng java.time, API ngày giờ hiện đại của Java. Các lớp ngày thời gian mà bạn sử dụng, Calendar, SimpleDateFormatvà Date, tất cả đều được thiết kế kém và may mắn thay lâu lỗi thời. Ngoài ra, mặc dù tên a Datekhông đại diện cho ngày tháng, mà là một thời điểm. Một hệ quả của điều này là: mặc dù hôm nay là ngày 15 tháng 2 năm 2019, một Dateđối tượng mới được tạo đã đứng sau (không bằng) một Dateđối tượng từ quá trình phân tích cú pháp 15/02/2019. Điều này khiến một số người bối rối. Trái ngược với điều này, ngày hiện đại LocalDatelà ngày không có thời gian trong ngày (và không có múi giờ), vì vậy hai chữ cái LocalDateđại diện cho ngày hôm nay sẽ luôn bằng nhau.
Câu hỏi: Tôi có thể sử dụng java.time trên Android không?
Có, java.time hoạt động tốt trên các thiết bị Android cũ hơn và mới hơn. Nó chỉ yêu cầu ít nhất Java 6 .
- Trong Java 8 trở lên và trên các thiết bị Android mới hơn (từ API cấp 26), API hiện đại được tích hợp sẵn.
- Trong Java 6 và 7, hãy lấy ThreeTen Backport, backport của các lớp hiện đại (ThreeTen cho JSR 310; xem các liên kết ở dưới cùng).
- Trên Android (cũ hơn) sử dụng phiên bản Android của ThreeTen Backport. Nó được gọi là ThreeTenABP. Và đảm bảo rằng bạn nhập các lớp ngày và giờ từ
org.threeten.bpvới các gói con.
Liên kết
Calendar,SimpleDateFormat,Datehoặc bất kỳ ngày Java và thời gian lớp lạc hậu dài khác. Thay vào đójava.time, hãy sử dụng API ngày và giờ của Java hiện đại . Có, bạn có thể sử dụng nó trên Android. Đối với Android cũ hơn, hãy xem Cách sử dụng ThreeTenABP trong Android Project .