LocalDate trong Java là một class trong package java.time trong Java 8 và các phiên bản sau đó. Nó được sử dụng để lưu trữ và xử lý ngày trong một chuẩn ISO định dạng, không chứa thời gian hoặc thời gian địa phương.
Giới thiệu về LocalDate trong Java
LocalDate là một lớp trong gói java.time của Java, được giới thiệu từ phiên bản Java 8. Nó cung cấp các phương thức để làm việc với các ngày trong việc lập trình.
LocalDate cung cấp các phương thức để làm việc với ngày, ví dụ như lấy ngày hiện tại, tăng hoặc giảm ngày, lấy tháng hoặc năm, v.v.
LocalDate đại diện cho một ngày duy nhất trong hệ thống ngày tháng, mà không bao gồm thông tin về thời gian hay múi giờ. Nó lưu trữ ngày tháng dưới dạng yyyy-MM-dd, trong đó yyyy là năm (4 chữ số), MM là tháng (2 chữ số từ 01 đến 12), và dd là ngày trong tháng (2 chữ số từ 01 đến 31).
Một số tính năng quan trọng của LocalDate:
- Khởi tạo LocalDate: Bạn có thể khởi tạo một đối tượng LocalDate bằng cách sử dụng các phương thức tĩnh như now() để lấy ngày hôm nay, of() để khởi tạo từ các giá trị năm, tháng và ngày cụ thể, hoặc parse() để chuyển đổi từ chuỗi thành LocalDate.
- Truy xuất thông tin từ LocalDate: Bạn có thể truy xuất các thông tin như năm, tháng và ngày từ một đối tượng LocalDate bằng các phương thức như getYear(), getMonth(), getDayOfMonth(), và nhiều phương thức khác.
- Thay đổi giá trị của LocalDate: LocalDate là một lớp không thay đổi (immutable), điều này có nghĩa là một khi bạn tạo một đối tượng LocalDate, nó không thể thay đổi. Tuy nhiên, bạn có thể tạo ra một đối tượng mới từ đối tượng hiện tại bằng cách sử dụng các phương thức như plusDays(), plusMonths(), minusYears(), và nhiều phương thức khác để thay đổi giá trị của ngày.
- So sánh LocalDate: Bạn có thể so sánh hai đối tượng LocalDate bằng cách sử dụng các phương thức như isBefore(), isAfter(), isEqual(), và compareTo().
LocalDate là một công cụ mạnh mẽ để làm việc với các ngày trong Java. Nó hỗ trợ các phép toán và thao tác cần thiết để thao tác với ngày tháng và thực hiện các tính toán liên quan đến thời gian.
Các phương thức cơ bản của LocalDate
Dưới đây là một số phương thức cơ bản của lớp LocalDate trong Java:
- now(): Trả về một đối tượng LocalDate đại diện cho ngày hôm nay.
Ví dụ:
LocalDate today = LocalDate.now();
- of(year, month, dayOfMonth): Khởi tạo một đối tượng LocalDate từ các giá trị năm, tháng và ngày cụ thể.
Ví dụ:
LocalDate date = LocalDate.of(2023, 6, 12);
- getYear(): Trả về năm của đối tượng LocalDate.
Ví dụ:
int year = date.getYear();
- getMonth(): Trả về đối tượng Enum Month đại diện cho tháng của LocalDate.
Ví dụ:
Month month = date.getMonth();
- getDayOfMonth(): Trả về ngày trong tháng của LocalDate.
Ví dụ:
int dayOfMonth = date.getDayOfMonth();
- plusDays(daysToAdd): Trả về một đối tượng LocalDate mới sau khi thêm một số ngày cụ thể vào LocalDate hiện tại.
Ví dụ:
LocalDate newDate = date.plusDays(7);
- minusDays(daysToSubtract): Trả về một đối tượng LocalDate mới sau khi giảm một số ngày cụ thể từ LocalDate hiện tại.
Ví dụ:
LocalDate newDate = date.minusDays(7);
- isBefore(otherDate): Kiểm tra xem LocalDate hiện tại có trước otherDate hay không.
Ví dụ:
boolean before = date.isBefore(otherDate);
- isAfter(otherDate): Kiểm tra xem LocalDate hiện tại có sau otherDate hay không.
Ví dụ:
boolean after = date.isAfter(otherDate);
Đây chỉ là một số phương thức cơ bản của lớp LocalDate. Còn rất nhiều phương thức khác được cung cấp để làm việc với LocalDate trong Java. Bạn có thể xem thêm tài liệu chính thức của Java để biết thêm chi tiết về các phương thức này.
Xem thêm Lịch sử của Laravel
Các phép toán và xử lý với LocalDate
Lớp LocalDate trong Java cung cấp nhiều phép toán và xử lý để làm việc với ngày tháng. Dưới đây là một số phép toán và xử lý phổ biến với LocalDate:
- So sánh LocalDate:
- isBefore(otherDate): Kiểm tra xem LocalDate hiện tại có trước otherDate hay không.
- isAfter(otherDate): Kiểm tra xem LocalDate hiện tại có sau otherDate hay không.
- isEqual(otherDate): Kiểm tra xem LocalDate hiện tại có bằng otherDate hay không.
- Tính toán khoảng cách giữa hai LocalDate:
- until(endDate): Tính toán số ngày giữa LocalDate hiện tại và endDate.
- until(endDate, unit): Tính toán số lượng đơn vị (ngày, tháng, năm, v.v.) giữa LocalDate hiện tại và endDate.
Ví dụ:
LocalDate start = LocalDate.of(2023, 1, 1); LocalDate end = LocalDate.of(2023, 12, 31); long daysBetween = start.until(end, ChronoUnit.DAYS); long monthsBetween = start.until(end, ChronoUnit.MONTHS); long yearsBetween = start.until(end, ChronoUnit.YEARS);
- Cộng và trừ ngày:
- plusDays(daysToAdd): Thêm một số ngày cụ thể vào LocalDate hiện tại.
- minusDays(daysToSubtract): Giảm một số ngày cụ thể từ LocalDate hiện tại.
- plusWeeks(weeksToAdd): Thêm một số tuần cụ thể vào LocalDate hiện tại.
- minusWeeks(weeksToSubtract): Giảm một số tuần cụ thể từ LocalDate hiện tại.
- plusMonths(monthsToAdd): Thêm một số tháng cụ thể vào LocalDate hiện tại.
- minusMonths(monthsToSubtract): Giảm một số tháng cụ thể từ LocalDate hiện tại.
- plusYears(yearsToAdd): Thêm một số năm cụ thể vào LocalDate hiện tại.
- minusYears(yearsToSubtract): Giảm một số năm cụ thể từ LocalDate hiện tại.
Ví dụ:
LocalDate date = LocalDate.now(); LocalDate futureDate = date.plusDays(7); LocalDate pastDate = date.minusWeeks(2);
- Kiểm tra tính hợp lệ của ngày:
- isLeapYear(): Kiểm tra xem năm của LocalDate có phải là năm nhuận hay không.
- isValidYearMonth(): Kiểm tra tính hợp lệ của năm và tháng của LocalDate.
- isValidDayOfMonth(): Kiểm tra tính hợp lệ của ngày trong tháng của LocalDate.
Ví dụ:
LocalDate date = LocalDate.of(2023, 2, 29); boolean leapYear = date.isLeapYear(); boolean validDate = date.isValidYearMonth() && date.isValidDayOfMonth();
Đây chỉ là một số phép toán và xử lý cơ bản với LocalDate trong Java. Lớp LocalDate cung cấp nhiều phương thức khác để thao tác và xử lý với ngày tháng. Bạn có thể tham khảo tài liệu chính thức của Java để biết thêm chi tiết và các phương thức khác của lớp LocalDate.
Định dạng và hiển thị LocalDate
Để định dạng và hiển thị đối tượng LocalDate trong Java, bạn có thể sử dụng các phương thức format() và toString() của lớp LocalDate cùng với các đối tượng DateTimeFormatter.
Dưới đây là một số ví dụ về cách định dạng và hiển thị LocalDate:
- Sử dụng định dạng mặc định:
LocalDate date = LocalDate.now(); String formattedDate = date.toString(); System.out.println("Default format: " + formattedDate);
Kết quả: “Default format: 2023-06-12”
- Sử dụng DateTimeFormatter để định dạng LocalDate theo mẫu mong muốn:
LocalDate date = LocalDate.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); String formattedDate = date.format(formatter); System.out.println("Formatted date: " + formattedDate);
Kết quả: “Formatted date: 12/06/2023”
- Chuyển đổi từ chuỗi thành LocalDate:
String dateString = "2023-06-12"; LocalDate date = LocalDate.parse(dateString); System.out.println("Parsed date: " + date);
Kết quả: “Parsed date: 2023-06-12”
Lưu ý rằng khi sử dụng DateTimeFormatter để định dạng hoặc phân tích chuỗi thành LocalDate, bạn cần xác định mẫu định dạng phù hợp với chuỗi đầu vào hoặc đầu ra mong muốn. Các ký tự đại diện cho ngày, tháng và năm trong mẫu định dạng là “d” (ngày), “M” (tháng), và “y” (năm).
Bằng cách sử dụng các phương thức này, bạn có thể điều chỉnh định dạng của LocalDate để phù hợp với yêu cầu của ứng dụng của mình.
Xem thêm strtotime trong php là gì ?
Phân biệt LocalDate với Date trong java
LocalDate và Date trong Java là hai class được sử dụng để lưu trữ và xử lý thông tin ngày, tuy nhiên chúng có một số sự khác biệt chính:
- LocalDate chỉ chứa ngày, tháng, năm, không chứa thời gian hoặc thời gian địa phương, trong khi Date chứa thời gian và thời gian địa phương.
- LocalDate sử dụng chuẩn ISO định dạng ngày, trong khi Date sử dụng chuẩn thời gian Unix Epoch.
- LocalDate mới được thêm vào trong Java 8 và các phiên bản sau đó, trong khi Date là một class cũ hơn trong Java.
- Vì LocalDate chỉ chứa ngày, tháng, năm nên nó có thể sử dụng để xử lý các thao tác liên quan đến ngày, ví dụ như tính toán ngày giữa các ngày, tăng hoặc giảm ngày, v.v. Trong khi đó Date có thể sử dụng để xử lý các thao tác liên quan đến thời gian, ví dụ như tính toán thời gian giữa hai thời điểm.
- LocalDate có các phương thức và các lớp hỗ trợ của java.time package, vì vậy nó có thể sử dụng với các lớp hỗ trợ khác nhau. Trong khi đó, Date không có các lớp hỗ trợ như vậy và không đượccủa nó không được khuyến khích sử dụng trong các ứng dụng mới vì nó có một số hạn chế và khuyết điểm như không hỗ trợ chuẩn ISO định dạng ngày, không hỗ trợ các tính toán về ngày, không hỗ trợ các thao tác liên quan đến thời gian địa phương.
LocalDate có rất nhiều tính năng hữu ích hơn so với Date và khuyến khích sử dụng trong các dự án Java mới.
Convert LocalDate sang Date và ngược lại
Có hai cách để chuyển đổi giữa LocalDate và Date trong Java:
- Chuyển từ LocalDate sang Date:
LocalDate localDate = LocalDate.now(); Instant instant = localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant(); Date date = Date.from(instant);
- Chuyển từ Date sang LocalDate:
Date date = new Date(); Instant instant = date.toInstant(); LocalDate localDate = instant.atZone(ZoneId.systemDefault()).toLocalDate();
Note:
- Trong ví dụ trên, chúng ta sử dụng Instant để chuyển đổi giữa LocalDate và Date. Instant là một class trong package java.time cung cấp thông tin về một thời điểm dựa trên chuẩn Unix Epoch.
- atStartOfDay() để chuyển LocalDate sang Date, trong khi toLocalDate() để chuyển từ Date sang LocalDate.
- atZone() để chuyển Instant sang LocalDate, trong khi toInstant() để chuyển từ LocalDate sang Instant.
- ZoneId.systemDefault() là một đối tượng cung cấp thông tin về múi giờ địa phương.
Mong rằng với các ví dụ trên sẽ giúp bạn hiểu rõ hơn về cách chuyển đổi giữa LocalDate và Date.