- TemporalAdjusters
- TemporalAdjusters Methods
- ofDateAdjuster(UnaryOperator<LocalDate>)
- firstDayOfMonth()
- lastDayOfMonth()
- firstDayOfNextMonth()
- firstDayOfYear()
- lastDayOfYear()
- firstDayOfNextYear()
- firstInMonth(DayOfWeek)
- lastInMonth(DayOfWeek)
- dayOfWeekInMonth(int, DayOfWeek)
- next(DayOfWeek)
- nextOrSame(DayOfWeek)
- previous(DayOfWeek)
- previousOrSame(DayOfWeek)
Hướng dẫn và ví dụ Java TemporalAdjusters
1. TemporalAdjusters
Lớp TemporalAdjusters cung cấp các phương thức tĩnh để có được các đối tượng TemporalAdjuster thông dụng và hữu ích, chẳng hạn:
- Tìm kiếm ngày đầu tiên hoặc cuối cùng của tháng.
- Tìm kiếm ngày đầu tiên của tháng tiếp theo.
- Tìm kiếm ngày đầu tiên hoặc cuối cùng của năm.
- Tìm kiếm ngày đầu tiên của năm tiếp theo.
- Tìm kiếm "ngày trong tuần" (day-of-week) đầu tiên hoặc cuối cùng trong một tháng, chẳng hạn "Thứ tư đầu tiên của tháng sáu".
- Tìm kiếm "ngày trong tuần" (day-of-week) trước hoặc tiếp theo, chẳng hạn "Thứ năm tiếp theo".
Xem thêm bài viết về interface TemporalAdjuster với các ví dụ cơ bản và tuỳ biến TemporalAdjuster:
2. TemporalAdjusters Methods
Tất cả các phương thức được cung cấp bởi TemporalAdjusters đều là tĩnh và trả về một đối tượng TemporalAdjuster.
public static TemporalAdjuster ofDateAdjuster(UnaryOperator<LocalDate> dateBasedAdjuster)
public static TemporalAdjuster firstDayOfMonth()
public static TemporalAdjuster lastDayOfMonth()
public static TemporalAdjuster firstDayOfNextMonth()
public static TemporalAdjuster firstDayOfYear()
public static TemporalAdjuster lastDayOfYear()
public static TemporalAdjuster firstDayOfNextYear()
public static TemporalAdjuster firstInMonth(DayOfWeek dayOfWeek)
public static TemporalAdjuster lastInMonth(DayOfWeek dayOfWeek)
public static TemporalAdjuster dayOfWeekInMonth(int ordinal, DayOfWeek dayOfWeek)
public static TemporalAdjuster next(DayOfWeek dayOfWeek)
public static TemporalAdjuster nextOrSame(DayOfWeek dayOfWeek)
public static TemporalAdjuster previous(DayOfWeek dayOfWeek)
public static TemporalAdjuster previousOrSame(DayOfWeek dayOfWeek)
3. ofDateAdjuster(UnaryOperator<LocalDate>)
Phương thức này trả về một đối tượng TemporalAdjuster để điều chỉnh phần LocalDate của một đối tượng Temporal, các phần khác của đối tượng Temporal không thay đổi.
public static TemporalAdjuster ofDateAdjuster(UnaryOperator<LocalDate> dateBasedAdjuster) {
Objects.requireNonNull(dateBasedAdjuster, "dateBasedAdjuster");
return (temporal) -> {
LocalDate input = LocalDate.from(temporal);
LocalDate output = dateBasedAdjuster.apply(input);
return temporal.with(output);
};
}
Chẳng hạn, thêm 2 ngày vào một đối tượng Temporal:
Temporal | Example | After 2 days |
ZonedDateTime | 2020-05-25T13:30:59+6[Asia/Bishkek] | 2020-05-27T13:30:59+6[Asia/Bishkek] |
OffsetDateTime | 2020-05-25T13:30:59+6 | 2020-05-27T13:30:59+6 |
LocalDateTime | 2020-05-25T13:30:59 | 2020-05-27T13:30:59 |
Ví dụ: Một TemporalAdjuster để thêm vào 2 ngày.
TemporalAdjusters_ofDateAdjuster_ex1.java
package org.o7planning.temporaladjusters.ex;
import java.time.ZonedDateTime;
import java.time.temporal.TemporalAdjuster;
import java.time.temporal.TemporalAdjusters;
public class TemporalAdjusters_ofDateAdjuster_ex1 {
public static void main(String[] args) {
TemporalAdjuster add2DaysAdjuster = TemporalAdjusters.ofDateAdjuster(localDate -> localDate.plusDays(2));
ZonedDateTime zonedDateTime = ZonedDateTime.now();
ZonedDateTime after2Days = zonedDateTime.with(add2DaysAdjuster);
System.out.println("zonedDateTime: " + zonedDateTime);
System.out.println("after2Days: " + after2Days);
}
}
Output:
zonedDateTime: 2021-07-05T18:53:19.138987+06:00[Asia/Bishkek]
after2Days: 2021-07-07T18:53:19.138987+06:00[Asia/Bishkek]
- Hướng dẫn và ví dụ Java UnaryOperator
4. firstDayOfMonth()
Trả về một TemporalAdjuster - "ngày đầu tiên trong tháng".
public static TemporalAdjuster firstDayOfMonth()
Ví dụ:
TemporalAdjusters_firstDayOfMonth_ex1.java
LocalDate localDate = LocalDate.now();
System.out.println("today is: " + localDate);
LocalDate firstDayOfMonth = (LocalDate) TemporalAdjusters.firstDayOfMonth().adjustInto(localDate);
System.out.println("firstDayOfMonth: " + firstDayOfMonth);
DayOfWeek dayOfWeek = firstDayOfMonth.getDayOfWeek();
System.out.println(" > day of week: " + dayOfWeek);
Output:
today is: 2021-07-05
firstDayOfMonth: 2021-07-01
> day of week: THURSDAY
- Hướng dẫn và ví dụ Java DayOfWeek
5. lastDayOfMonth()
Trả về một TemporalAdjuster - "ngày cuối cùng trong tháng".
public static TemporalAdjuster lastDayOfMonth()
Ví dụ:
TemporalAdjusters_lastDayOfMonth_ex1.java
LocalDate localDate = LocalDate.now();
System.out.println("today is: " + localDate);
LocalDate lastDayOfMonth = (LocalDate) TemporalAdjusters.lastDayOfMonth().adjustInto(localDate);
System.out.println("lastDayOfMonth: " + lastDayOfMonth);
DayOfWeek dayOfWeek = lastDayOfMonth.getDayOfWeek();
System.out.println(" > day of week: " + dayOfWeek);
Output:
today is: 2021-07-05
lastDayOfMonth: 2021-07-31
> day of week: SATURDAY
- Hướng dẫn và ví dụ Java DayOfWeek
6. firstDayOfNextMonth()
Trả về một TemporalAdjuster - "ngày đầu tiên trong tháng tiếp theo".
public static TemporalAdjuster firstDayOfNextMonth()
Ví dụ:
TemporalAdjusters_firstDayOfNextMonth_ex1.java
LocalDate localDate = LocalDate.now();
System.out.println("today is: " + localDate);
LocalDate firstDayOfNextMonth = (LocalDate) localDate.with(TemporalAdjusters.firstDayOfNextMonth());
System.out.println("firstDayOfNextMonth: " + firstDayOfNextMonth);
DayOfWeek dayOfWeek = firstDayOfNextMonth.getDayOfWeek();
System.out.println(" > day of week: " + dayOfWeek);
int dayOfMonth = firstDayOfNextMonth.getDayOfMonth();
System.out.println(" > day of month: " + dayOfMonth);
Output:
today is: 2021-07-05
firstDayOfNextMonth: 2021-08-01
> day of week: SUNDAY
> day of month: 1
7. firstDayOfYear()
Trả về một TemporalAdjuster - "ngày đầu tiên trong năm".
public static TemporalAdjuster firstDayOfYear()
Ví dụ:
TemporalAdjusters_firstDayOfYear_ex1.java
LocalDate localDate = LocalDate.now();
System.out.println("today is: " + localDate);
LocalDate firstDayOfYear = (LocalDate) localDate.with(TemporalAdjusters.firstDayOfYear());
System.out.println("firstDayOfYear: " + firstDayOfYear);
DayOfWeek dayOfWeek = firstDayOfYear.getDayOfWeek();
System.out.println(" > day of week: " + dayOfWeek);
Output:
today is: 2021-07-05
firstDayOfYear: 2021-01-01
> day of week: FRIDAY
8. lastDayOfYear()
Trả về một TemporalAdjuster - "ngày cuối cùng trong năm".
public static TemporalAdjuster lastDayOfYear()
Ví dụ:
TemporalAdjusters_lastDayOfYear_ex1.java
LocalDate localDate = LocalDate.now();
System.out.println("today is: " + localDate);
LocalDate lastDayOfYear = (LocalDate) localDate.with(TemporalAdjusters.lastDayOfYear());
System.out.println("lastDayOfYear: " + lastDayOfYear);
DayOfWeek dayOfWeek = lastDayOfYear.getDayOfWeek();
System.out.println(" > day of week: " + dayOfWeek);
Output:
today is: 2021-07-05
lastDayOfYear: 2021-12-31
> day of week: FRIDAY
9. firstDayOfNextYear()
Trả về một TemporalAdjuster - "ngày đầu tiên trong năm tiếp theo".
public static TemporalAdjuster firstDayOfNextYear()
Ví dụ:
TemporalAdjusters_firstDayOfNextYear_ex1.java
LocalDate localDate = LocalDate.now();
System.out.println("today is: " + localDate);
LocalDate firstDayOfNextYear = (LocalDate) localDate.with(TemporalAdjusters.firstDayOfNextYear());
System.out.println("firstDayOfNextYear: " + firstDayOfNextYear);
DayOfWeek dayOfWeek = firstDayOfNextYear.getDayOfWeek();
System.out.println(" > day of week: " + dayOfWeek);
int dayOfYear = firstDayOfNextYear.getDayOfYear();
System.out.println(" > day of year: " + dayOfYear);
Output:
today is: 2021-07-05
firstDayOfNextYear: 2022-01-01
> day of week: SATURDAY
> day of year: 1
10. firstInMonth(DayOfWeek)
Trả về một TemporalAdjuster - "Ngày trong tuần (day-of-week) đầu tiên trong tháng". Chẳng hạn, tìm ngày thứ hai (MONDAY) đầu tiên trong tháng.
public static TemporalAdjuster firstInMonth(DayOfWeek dayOfWeek)
Hiện nay tại Mỹ, ngày bắt đầu DST là ngày chủ nhật thứ hai của tháng 3 và kết thúc là ngày chủ nhật đầu tiên của tháng 11. Câu hỏi là ngày bắt đầu DST năm 2025 tại Mỹ là ngày nào?
TemporalAdjusters_firstInMonth_ex1.java
// Find the first SUNDAY in month.
TemporalAdjuster adjuster1 = TemporalAdjusters.firstInMonth(DayOfWeek.SUNDAY);
// Find the next SUNDAY
TemporalAdjuster adjuster2 = TemporalAdjusters.next(DayOfWeek.SUNDAY);
LocalDate localDate = LocalDate.of(2025, 3, 1); // 2025-03-01
LocalDate firstSundayInMonth = (LocalDate) localDate.with(adjuster1);
LocalDate secondSundayInMonth = (LocalDate) firstSundayInMonth.with(adjuster2);
System.out.println("firstSaturdayInMonth: " + firstSundayInMonth); // 2025-03-02
System.out.println("secondSundayInMonth: " + secondSundayInMonth); // 2025-03-09
11. lastInMonth(DayOfWeek)
Trả về một TemporalAdjuster - "Ngày trong tuần (day-of-week) cuối cùng trong tháng". Chẳng hạn, tìm ngày thứ hai (MONDAY) cuối cùng của tháng.
public static TemporalAdjuster lastInMonth(DayOfWeek dayOfWeek)
Ví dụ: Tìm ngày chủ nhật cuối cùng của tháng hiện tại:
TemporalAdjusters_lastInMonth_ex1.java
// Find the last SUNDAY in month.
TemporalAdjuster adjuster = TemporalAdjusters.lastInMonth(DayOfWeek.SUNDAY);
LocalDate localDate = LocalDate.now();
System.out.println("Today is: " + localDate);
LocalDate lastSundayInMonth = (LocalDate) localDate.with(adjuster);
System.out.println("lastSundayInMonth: " + lastSundayInMonth);
Output:
Today is: 2021-07-05
lastSundayInMonth: 2021-07-25
12. dayOfWeekInMonth(int, DayOfWeek)
Trả về một TemporalAdjuster - "ngày trong tuần (day-of-week) thứ ordinal trong tháng". Chẳng hạn, tìm ngày thứ hai (MONDAY) thứ 3 trong tháng.
public static TemporalAdjuster dayOfWeekInMonth(int ordinal, DayOfWeek dayOfWeek)
Ví dụ: Tìm ngày chủ nhật (SUNDAY) thứ hai của tháng 3 năm 2025 (Ngày bắt đầu DST năm 2025 tại Mỹ).
TemporalAdjusters_dayOfWeekInMonth_ex1.java
// Find the second SUNDAY in month.
TemporalAdjuster adjuster = TemporalAdjusters.dayOfWeekInMonth(2, DayOfWeek.SUNDAY);
LocalDate localDate = LocalDate.of(2025, 3, 1); // 2025-03-01
LocalDate secondSundayInMonth = (LocalDate) localDate.with(adjuster);
System.out.println("secondSundayInMonth: " + secondSundayInMonth); // 2025-03-09
13. next(DayOfWeek)
Trả về một TemporalAdjuster - "ngày trong tuần (day-of-week) tiếp theo". Chẳng hạn, tìm ngày thứ hai (MONDAY) tiếp theo.
public static TemporalAdjuster next(DayOfWeek dayOfWeek)
Ví dụ: Tìm thứ hai (MONDAY) tiếp theo.
TemporalAdjusters_next_ex1.java
// Find the next MONDAY
TemporalAdjuster adjuster = TemporalAdjusters.next(DayOfWeek.MONDAY);
LocalDate localDate = LocalDate.of(2021, 7, 5); // 2021-07-05
System.out.println("localDate: " + localDate); // 2021-07-05
System.out.println("localDate.getDayOfWeek(): " + localDate.getDayOfWeek()); // MONDAY
// Next MONDAY.
LocalDate nextMonday = localDate.with(adjuster);
System.out.println("nextMonday: " + nextMonday); // 2021-07-12
System.out.println("nextMonday.getDayOfWeek(): " + nextMonday.getDayOfWeek()); // MONDAY
Output:
localDate: 2021-07-05
localDate.getDayOfWeek(): MONDAY
nextMonday: 2021-07-12
nextMonday.getDayOfWeek(): MONDAY
14. nextOrSame(DayOfWeek)
Trả về một TemporalAdjuster - "ngày trong tuần (day-of-week) tương tự hoặc tiếp theo".
public static TemporalAdjuster nextOrSame(DayOfWeek dayOfWeek)
Ví dụ: Trả về ngày này nếu nó là thứ hai, ngược lại trả về ngày thứ hai tiếp theo.
TemporalAdjusters_nextOrSame_ex1.java
// Find the next or same MONDAY
TemporalAdjuster adjuster = TemporalAdjusters.nextOrSame(DayOfWeek.MONDAY);
LocalDate localDate = LocalDate.of(2021, 7, 5); // 2021-07-05
System.out.println("localDate: " + localDate); // 2021-07-05
System.out.println("localDate.getDayOfWeek(): " + localDate.getDayOfWeek()); // MONDAY
// Next or same MONDAY.
LocalDate nextOrSameMonday = localDate.with(adjuster);
System.out.println("nextOrSameMonday: " + nextOrSameMonday); // 2021-07-05
System.out.println("nextOrSameMonday.getDayOfWeek(): " + nextOrSameMonday.getDayOfWeek()); // MONDAY
15. previous(DayOfWeek)
Trả về một TemporalAdjuster - "ngày trong tuần (day-of-week) trước đó". Chẳng hạn, tìm ngày thứ hai (MONDAY) trước đó.
public static TemporalAdjuster previous(DayOfWeek dayOfWeek)
Ví dụ: Tìm thứ hai (MONDAY) trước đó.
TemporalAdjusters_previous_ex1.java
// Find the previous MONDAY
TemporalAdjuster adjuster = TemporalAdjusters.previous(DayOfWeek.MONDAY);
LocalDate localDate = LocalDate.of(2021, 7, 5); // 2021-07-05
System.out.println("localDate: " + localDate); // 2021-07-05
System.out.println("localDate.getDayOfWeek(): " + localDate.getDayOfWeek()); // MONDAY
// Previous MONDAY.
LocalDate previousMonday = localDate.with(adjuster);
System.out.println("previousMonday: " + previousMonday); // 2021-06-28
System.out.println("previousMonday.getDayOfWeek(): " + previousMonday.getDayOfWeek()); // MONDAY
Output:
localDate: 2021-07-05
localDate.getDayOfWeek(): MONDAY
previousMonday: 2021-06-28
previousMonday.getDayOfWeek(): MONDAY
16. previousOrSame(DayOfWeek)
Trả về một TemporalAdjuster - "ngày trong tuần (day-of-week) tương tự hoặc trước đó".
public static TemporalAdjuster previousOrSame(DayOfWeek dayOfWeek)
Ví dụ: Trả về ngày này nếu nó là thứ hai, ngược lại trả về ngày thứ hai trước đó.
TemporalAdjusters_previousOrSame_ex1.java
// Find the previous or same MONDAY
TemporalAdjuster adjuster = TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY);
LocalDate localDate = LocalDate.of(2021, 7, 5); // 2021-07-05
System.out.println("localDate: " + localDate); // 2021-07-05
System.out.println("localDate.getDayOfWeek(): " + localDate.getDayOfWeek()); // MONDAY
// Previous or same MONDAY.
LocalDate previousOrSameMonday = localDate.with(adjuster);
System.out.println("previousOrSameMonday: " + previousOrSameMonday); // 2021-07-05
System.out.println("previousOrSameMonday.getDayOfWeek(): " + previousOrSameMonday.getDayOfWeek()); // MONDAY
Các hướng dẫn Java Date Time
- Hướng dẫn và ví dụ Java ZoneId
- Hướng dẫn và ví dụ Java Temporal
- Hướng dẫn và ví dụ Java Period
- Hướng dẫn và ví dụ Java TemporalAdjusters
- Hướng dẫn và ví dụ Java MinguoDate
- Hướng dẫn và ví dụ Java TemporalAccessor
- Hướng dẫn và ví dụ Java JapaneseEra
- Hướng dẫn và ví dụ Java HijrahDate
- UTC, UT và GMT là gì?
- Hướng dẫn và ví dụ Date Time trong Java
- Giờ Tiết kiệm ánh sáng ban ngày (DST) là gì?
- Hướng dẫn và ví dụ Java LocalDate
- Hướng dẫn và ví dụ Java LocalTime
- Hướng dẫn và ví dụ Java LocalDateTime
- Hướng dẫn và ví dụ Java ZonedDateTime
- Hướng dẫn và ví dụ Java ZoneOffset
- Hướng dẫn và ví dụ Java JapaneseDate
- Hướng dẫn và ví dụ Java Duration
- Hướng dẫn và ví dụ Java TemporalQuery
- Hướng dẫn và ví dụ Java TemporalAdjuster
- Hướng dẫn và ví dụ Java ChronoUnit
- Hướng dẫn và ví dụ Java TemporalQueries
Show More
- Các hướng dẫn Java Web Services
- Hướng dẫn lập trình Java Servlet/JSP
- Các hướng dẫn lập trình JavaFX
- Các hướng dẫn lập trình Java SWT
- Các hướng dẫn Java Oracle ADF
- Java cơ bản
- Các hướng dẫn Java Collections Framework
- Các hướng dẫn Java IO
- Các hướng dẫn Struts2 Framework
- Các hướng dẫn Spring Boot
- Các hướng dẫn Spring Cloud
- Các hướng dẫn Maven
- Các hướng dẫn Gradle