Mục lục
Khi mới bắt đầu học lập trình C/C++ khi thao tác với ngày-tháng-năm mình đã rất vất vã để triển khai các hàm như kiểm tra năm nhuận, tính khoảng cách giữa 2 ngày etc. Thật may là java đã cung cấp cho chúng ta LocalDate class hỗ trợ hầu hết các method thao tác ngày-tháng-năm giúp giảm thiểu thời gian code đáng kể.
LocalDate class là một immutable class đại diện cho ngày-tháng-năm không có múi giờ, ví dụ như 2020-01-03.
Khởi tạo LocalDate
Để khởi tạo LocalDate object chúng ta có thể sử dụng LocalDate.now() (Lấy giá trị ngày hiện tại trong hệ thống) hoặc LocalDate.of().
import java.time.LocalDate; import java.time.Month; class LocalDateExample { public static void main(String[] args) { // Current date LocalDate localDate = LocalDate.now(); System.out.println(localDate); // 2020-01-04 //Specific date LocalDate localDate2 = LocalDate.of(2017, Month.MAY, 15); System.out.println(localDate2); // 2017-05-15 } }
Lấy ngày, tháng, năm từ LocalDate
Chúng ta có thể sử dụng getYear(), getMonth(), getDay() để lấy giá trị năm, tháng, ngày tương ứng trong LocalDate object.
import java.time.LocalDate; class LocalDateExample { public static void main(String[] args) { LocalDate localDate = LocalDate.now(); System.out.println("Year : " + localDate.getYear()); // Year : 2020 System.out.println("Month : " + localDate.getMonth().getValue()); // Month : 1 System.out.println("Day of Month : " + localDate.getDayOfMonth()); // Day of Month : 4 System.out.println("Day of Week : " + localDate.getDayOfWeek()); // Day of Week : SATURDAY System.out.println("Day of Year : " + localDate.getDayOfYear()); // Day of Year : 4 } }
Cộng và trừ ngày, tháng, năm trong LocalDate
LocalDate có sẵn các method plus(), minus() tương ứng với ngày tháng năm để thực hiện thao tác cộng và trừ trong LocalDate object.
import java.time.LocalDate; class LocalDateExample { public static void main(String[] args) { LocalDate localDate = LocalDate.now(); // LocalDate's plus methods System.out.println("Addition of days : " + localDate.plusDays(5)); // Addition of days : 2020-01-09 System.out.println("Addition of months : " + localDate.plusMonths(15)); // Addition of months : 2021-04-04 System.out.println("Addition of weeks : " + localDate.plusWeeks(45)); // Addition of weeks : 2020-11-14 System.out.println("Addition of years : " + localDate.plusYears(5)); // Addition of years : 2025-01-04 // LocalDate's minus methods System.out.println("Subtraction of days : " + localDate.minusDays(5)); // Subtraction of days : 2019-12-30 System.out.println("Subtraction of months : " + localDate.minusMonths(15)); // Subtraction of months : 2018-10-04 System.out.println("Subtraction of weeks : " + localDate.minusWeeks(45)); // Subtraction of weeks : 2019-02-23 System.out.println("Subtraction of years : " + localDate.minusYears(5)); // Subtraction of years : 2015-01-04 } }
So sánh LocalDate object trong java
Để so sánh LocalDate object trong java chúng ta có các method như isEqual() để so sánh bằng, isAfter(), isBefore(), compareTo().
isEqual(LocalDate other)
Trả về true nếu LocalDate object hiện tại bằng với other, ngược lại false.
// Example LocalDate d1 = LocalDate.now(); LocalDate d2 = LocalDate.now(); LocalDate d3 = LocalDate.now().minusDays(1); System.out.println(d1.isEqual(d2)); // true System.out.println(d1.isEqual(d3)); // false
isAfter(LocalDate other)
isAfter() trả về true nếu LocalDate hiện tại có giá trị lớn hơn LocalDate other truyền vào, ngược lại false.
LocalDate d1 = LocalDate.now(); LocalDate d2 = LocalDate.now().plusDays(1); LocalDate d3 = LocalDate.now().minusDays(1); System.out.println(d1.isAfter(d2)); // false System.out.println(d1.isAfter(d3)); // true System.out.println(d1.isAfter(d1)); // false
isBefore(LocalDate other)
isBefore() trả về true nếu LocalDate hiện tại có giá trị nhỏ hơn LocalDate other truyền vào, ngược lại false.
LocalDate d1 = LocalDate.now(); LocalDate d2 = LocalDate.now().plusDays(1); LocalDate d3 = LocalDate.now().minusDays(1); System.out.println(d1.isBefore(d2)); // true System.out.println(d1.isBefore(d3)); // false System.out.println(d1.isBefore(d1)); // false
compareTo(LocalDate other)
So sánh LocalDate object hiện tại với other từ tham số truyền vào. Trả về số dương nếu object hiện tại lớn hơn other, 0 nếu bằng nhau và âm nếu nhỏ hơn.
LocalDate d1 = LocalDate.now(); LocalDate d2 = LocalDate.now(); LocalDate d3 = LocalDate.now().minusDays(1); System.out.println(d1.compareTo(d2)); // 0 System.out.println(d1.compareTo(d3)); // 1 System.out.println(d3.compareTo(d2)); // -1
Kiểm tra năm nhuận trong java
LocalDate cung cấp method isLeapYear() để kiểm tra năm nhuận trong java.
import java.time.LocalDate; import java.time.Month; class LocalDateExample { public static void main(String[] args) { LocalDate localDate1 = LocalDate.of(2017, Month.JANUARY, 1); LocalDate localDate2 = LocalDate.of(2016, Month.JANUARY, 1); if(localDate1.isLeapYear()){ System.out.println(localDate1.getYear()+ " is a leap year"); }else{ System.out.println(localDate1.getYear()+ " is not a leap year"); } if(localDate2.isLeapYear()){ System.out.println(localDate2.getYear()+ " is a leap year"); }else{ System.out.println(localDate2.getYear()+ " is not a leap year"); } } }
Output:
2017 is not a leap year
2016 is a leap year
Convert String sang LocalDate trong java
Chúng ta có thể sử dụng methof parse() trong LocalDate class để convert một chuỗi sang LocalDate.
import java.time.LocalDate; import java.time.format.DateTimeFormatter; class LocalDateExample { public static void main(String[] args) { // ISO Date LocalDate localDate = LocalDate.parse("2020-05-03", DateTimeFormatter.ISO_LOCAL_DATE); System.out.println(localDate); // 2020-05-03 // yyyy/MM/dd pattern LocalDate localDate1 = LocalDate.parse("2020/05/12", DateTimeFormatter.ofPattern("yyyy/MM/dd")); System.out.println(localDate1); // 2020-05-12 // MMM dd, yyyy pattern LocalDate localDate2 = LocalDate.parse("May 05, 2020", DateTimeFormatter.ofPattern("MMM dd, yyyy")); System.out.println(localDate2); // 2020-05-05 // dd-MMM-yyyy pattern LocalDate localDate3 = LocalDate.parse("12-Jan-2020", DateTimeFormatter.ofPattern("dd-MMM-yyyy")); System.out.println(localDate3); // 2020-01-12 // dd-LL-yyyy pattern LocalDate localDate4 = LocalDate.parse("12-01-2020", DateTimeFormatter.ofPattern("dd-LL-yyyy")); System.out.println(localDate4); // 2020-01-12 } }
Convert LocalDate sang String trong java
Chúng ta có thể sử dụng format() method trong LocalDate class để chuyển LocalDate object sang String.
import java.time.LocalDate; import java.time.format.DateTimeFormatter; class LocalDateExample { public static void main(String[] args) { // ISO Date LocalDate localDate = LocalDate.now(); DateTimeFormatter dateFormatter = DateTimeFormatter.ISO_LOCAL_DATE; System.out.println(localDate.format(dateFormatter)); // 2020-01-04 // yyyy/MM/dd pattern DateTimeFormatter dateFormatter1 = DateTimeFormatter .ofPattern("yyyy/MM/dd"); System.out.println(localDate.format(dateFormatter1)); // 2020/01/04 // MMMM dd, yyyy pattern DateTimeFormatter dateFormatter2 = DateTimeFormatter .ofPattern("MMMM dd, yyyy"); System.out.println(localDate.format(dateFormatter2)); // January 04, 2020 // dd-MMM-yyyy pattern DateTimeFormatter dateFormatter3 = DateTimeFormatter .ofPattern("dd-MMM-yyyy"); System.out.println(localDate.format(dateFormatter3)); // 04-Jan-2020 // dd-LL-yyyy pattern DateTimeFormatter dateFormatter4 = DateTimeFormatter .ofPattern("dd-LL-yyyy"); System.out.println(localDate.format(dateFormatter4)); // 04-01-2020 } }
Kết
Với rất nhiều method hữu ích giúp chúng ta thao tác nhanh gọn hơn với ngày-tháng-năm, LocalDate được sử dụng rất nhiều trong các dự án java. Vậy nếu đã biết đến nó rồi thì đừng có dại mà đi implement một class Date nữa nhé, sẽ mất nhiều thời gian đó.