1. Hạn chế của java date time api các version trước 8Trước khi chúng ta bắt đầu với date time api version 8, cùng xem vài hạn chế với date, time hiện tại của java.
- Việc thiết kế các class java date time chưa hợp lý, chúng ta có:
Date class trong: java.util và java.sql, trong khi đó thì formatting và parsing class thì lại định nghĩa trong gói java.text
- java.util.Date bao gồm cả date và time, trong khi đó java.sql.Date thì chỉ có Date.
- Không có 1 class định nghĩa rõ ràng cho Time, formatting và parsing. Chúng ta có abstract class java.text.DateFormat dùng để formatting và parsing. Thường thì sử dụng SimpleDateFormat cho việc formatting và parsing.
- Tất cả Date class thì mutable, tức là có thể thay đổi được, vì vậy nên chúng thì not thread safe. Đây là một vấn đề lớn của các class Date và Calendar trong java.
- Class Date trong java thì không hỗ trợ internationalization, tức là không hỗ trợ việc quốc tế hóa. Không có một sự hỗ trợ timezone nào. Vì vậy mà java.util.Calendar và java.util.TimeZone được giới thiệu nhưng chúng cũng có những hạn chế nêu trên.
2. java 8 Date
Một số nguyên tắc thiết kế của java Date Time API 8:
- immutability: Tất cả các class trong API Date Time mới thì immutable (bất biến) điều này đồng nghĩa với việc nó rất tốt cho môi trường đa luồng (multi thread).
- Separation of Concerns: Có nghĩa là nó định nghĩa các class riêng rẽ: Date, Time, DateTime, TimeStamp, TimeZone, ...
- Clarity: các method được định nghĩa rõ ràng và thực thi cùng nhiệm vụ trong tất cả các class, ví dụ: để lấy được current instant chúng ta có now() method.
Tất cả class sử dụng: Factory Pattern và Strategy Pattern sẽ tốt hơn cho việc xử lý. Một khi sử dụng phương thức trong một class thì việc sử dụng trong class khác sẽ không thành vấn đề.
- Utility operations: Tất cả Date Time API mới đều thiết kế những phương thức thực hiện những nhiệm vụ chung, như là: plus, minus, format, parsing, ...
3. Java 8 Date Time API package
- java.time
là gói chính của java date time api, những class chính như: LocalDate, LocalTime, LocalDateTime, Instant, Period, Duration đều thuộc gói này. Tất cả các class này đều: immutable và thread safe.
- java.time.chrono
- java.time.format
- java.time.temporal
- java.time.zone
4. Example
- LocalDate
java.time.LocalDate today = java.time.LocalDate.now();
System.out.println("Today is: " + today);
Lấy ra ngày hiện tại với định dạng: yyyy-mm-dd
- LocalTime
LocalTime time = LocalTime.now();
System.out.println(time);
Lấy ra giờ hiện tại của hệ thống và time-zone mặc định.
- LocalDateTime
LocalDateTime today = LocalDateTime.now();
System.out.println(today);
Lấy ra ngày giờ hiện tại của hệ thống.
- Instant
Instant timeStamp = Instant.now();
System.out.println(timeStamp);
0 nhận xét:
Đăng nhận xét