Xin chào các bạn, hôm nay mình sẽ giới thiệu các bạn cách làm việc với kiểu dữ liệu ngày giờ trong Java. Kể từ khi Java 8, Oracle đã xây dựng lại API về ngày tháng, được cho là tốt hơn các API cũ.
Kiểu dữ liệu ngày giờ trong Java
Dưới đây là một số lớp hỗ trợ kiểu dữ liệu ngày giờ:
- java.util.Date: Một lớp đại diện cho ngày tháng năm và thời gian. Tiếc là hầu hết các phương thức của nó đã bị lỗi thời, khuyến cáo là không nên sử dụng các phương thức đó, tuy nhiên lớp Date vẫn được sử dụng rỗng rãi.
- java.sql.Date: Một lớp mô tả ngày tháng năm. Thông tin về thời gian bị cắt bỏ. Lớp này thường sử dụng trong JDBC.
- java.util.Calendar: Lớp mô tả bộ Lịch. Nó có các phương thức toán học về thời gian, chẳng hạn thêm ngày, bớt ngày,…
- java.time.*: Lớp này cung cấp đầy đủ các API xử lý ngày giờ trong Java. Đây là lớp mới được hỗ trợ từ Java 8.
Trong bài viết này mình chỉ giới thiệu các bạn về các lớp thuộc package java.time, vì đây là các API mới trong Java 8.
Làm việc với API mới
Class LocalDate
Bạn có thể tạo một đối tượng thuộc class LocalDate bằng các phương thức tĩnh được cung cấp sẵn. Lưu ý là không thể tạo trực tiếp từ contructor.
public static void main(String[] args) { LocalDate now = LocalDate.now(); System.out.println(now); // 2020-03-04 // Trả về ngày tháng năm hiện tại LocalDate tet = LocalDate.of(2020,1,1); System.out.println(tet); // 2020-01-01 LocalDate holiday = LocalDate.of(2020, Month.MARCH, 8); System.out.println(holiday); // 2020-03-08 }
Như vậy chúng ta có thể tạo được một đối tượng của class bằng các phương thức tĩnh là now()
và of()
.
Class LocalTime
Tương tự như trên bạn cũng có thể tạo một đối tượng LocalTime từ các phương thức tĩnh.
public static void main(String[] args) { LocalTime now = LocalTime.now(); System.out.println(now); // Trả về giờ hiện tại // 10:51:07.128 LocalTime time = LocalTime.of(10,49); System.out.println(time); // 10:49 LocalTime time2 = LocalTime.of(10, 49, 50); System.out.println(time2); // 10:49:50 }
Class LocalDateTime
Class LocalDateTime là class đại diện cho cả hai class ở trên, nó bao gồm thông tin về ngày tháng và thời gian. Tương tự chúng ta có thể tạo bằng các phương thức tĩnh được cung cấp sẵn.
public static void main(String[] args) { LocalDateTime now = LocalDateTime.now(); System.out.println(now); // In ra thông tin về ngày giờ // Phân cách ngày giờ bởi tự T // 2020-03-05T09:03:55.069 LocalDateTime newYear = LocalDateTime.of(LocalDate.of(2021, 12, 31), LocalTime.of(11, 59)); System.out.println(newYear); // 2021-12-31T11:59 }
Các lợi ích của API ngày giờ mới
Được tích hợp các API mạnh mẽ
public static void main(String[] args) { LocalDate now = LocalDate.now(); System.out.println(now); // 2020-03-05 LocalDate tomorow = now.plusDays(1); System.out.println(tomorow); // 2020-03-06 System.out.println(tomorow.getDayOfWeek()); // FRIDAY }
Được cung cấp các phương thức plus*()
để thêm ngày, tuần… Và các phương thức minus*()
để giảm ngày, tuần.
Được khuyến khích thay thế lớp Date và Calendar
public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); calendar.set(2020, 2, 4); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH); int day = calendar.get(Calendar.DAY_OF_MONTH); int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); System.out.printf("%04d-%02d-%02d%n",year,month+1,day+1); // 2020-03-05 // Tháng trong Calendar bắt đầu từ 0-11 // Tương tự cho ngày System.out.println(dayOfWeek); // 4 => Thứ Năm // 0: Chủ nhật // 1: Thứ 2 // ... // 6: Thứ 7 }
Nếu sử dụng Calendar thì khá dài dòng cho đoạn code in ra ngày tháng ở trên. Và đặc biệt là sự rắc rối của nó, bạn rất dễ nhầm lẫn bởi vì tháng trong Calendar bắt đầu từ 0… Hazzz quá nhiều lý do để chúng ta sử dụng API mới phải không các bạn !
Bài viết mình đến đây là kết thúc, cám ơn các bạn đã theo dõi !
Để lại một bình luận