import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Month;
import java.time.temporal.TemporalAdjusters;
import java.time.temporal.WeekFields;
import java.util.Locale;
public class Main {
public static void main
(String[] args
) { // A sample LocalDate
LocalDate date = LocalDate.of(2011, Month.JANUARY, 21);
LocalDate dateOnSameOrPreviousMon = date.with(
TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
LocalDate dateOnSameOrNextSun = date.with(
TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
System.
out.
println(dateOnSameOrPreviousMon
); System.
out.
println(dateOnSameOrNextSun
);
// ###### The first day of the week is Locale-sensitive ######
LocalDate now = LocalDate.now();
// First day of a week in the US is Sunday
DayOfWeek firstDayOfWeekUs = now
.
with(WeekFields.
of(Locale.
US).
dayOfWeek(),
1) .getDayOfWeek();
System.
out.
println(firstDayOfWeekUs
);
// First day of a week in the UK is Monday
DayOfWeek firstDayOfWeekUk = now
.
with(WeekFields.
of(Locale.
UK).
dayOfWeek(),
1) .getDayOfWeek();
System.
out.
println(firstDayOfWeekUk
);
// ###### Thus, the first and last days of the week of the given date:
// In the US
LocalDate dateOnFirstDayOfWeekUs = date.with(
TemporalAdjusters.previousOrSame(firstDayOfWeekUs));
LocalDate dateOnLaststDayOfWeekUs = dateOnFirstDayOfWeekUs.plusDays(6);
System.
out.
println(dateOnFirstDayOfWeekUs
); System.
out.
println(dateOnLaststDayOfWeekUs
);
// In the UK
LocalDate dateOnFirstDayOfWeekUk = date.with(
TemporalAdjusters.previousOrSame(firstDayOfWeekUk));
LocalDate dateOnLaststDayOfWeekUk = dateOnFirstDayOfWeekUk.plusDays(6);
System.
out.
println(dateOnFirstDayOfWeekUk
); System.
out.
println(dateOnLaststDayOfWeekUk
); }
}
aW1wb3J0IGphdmEudGltZS5EYXlPZldlZWs7CmltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlOwppbXBvcnQgamF2YS50aW1lLk1vbnRoOwppbXBvcnQgamF2YS50aW1lLnRlbXBvcmFsLlRlbXBvcmFsQWRqdXN0ZXJzOwppbXBvcnQgamF2YS50aW1lLnRlbXBvcmFsLldlZWtGaWVsZHM7CmltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwoKcHVibGljIGNsYXNzIE1haW4gewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIC8vIEEgc2FtcGxlIExvY2FsRGF0ZQogICAgICAgIExvY2FsRGF0ZSBkYXRlID0gTG9jYWxEYXRlLm9mKDIwMTEsIE1vbnRoLkpBTlVBUlksIDIxKTsKCiAgICAgICAgTG9jYWxEYXRlIGRhdGVPblNhbWVPclByZXZpb3VzTW9uID0gZGF0ZS53aXRoKAogICAgICAgICAgICAgICAgVGVtcG9yYWxBZGp1c3RlcnMucHJldmlvdXNPclNhbWUoRGF5T2ZXZWVrLk1PTkRBWSkpOwoKICAgICAgICBMb2NhbERhdGUgZGF0ZU9uU2FtZU9yTmV4dFN1biA9IGRhdGUud2l0aCgKICAgICAgICAgICAgICAgIFRlbXBvcmFsQWRqdXN0ZXJzLm5leHRPclNhbWUoRGF5T2ZXZWVrLlNVTkRBWSkpOwoKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZGF0ZU9uU2FtZU9yUHJldmlvdXNNb24pOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihkYXRlT25TYW1lT3JOZXh0U3VuKTsKCiAgICAgICAgLy8gIyMjIyMjIFRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgaXMgTG9jYWxlLXNlbnNpdGl2ZSAjIyMjIyMKICAgICAgICBMb2NhbERhdGUgbm93ID0gTG9jYWxEYXRlLm5vdygpOwoKICAgICAgICAvLyBGaXJzdCBkYXkgb2YgYSB3ZWVrIGluIHRoZSBVUyBpcyBTdW5kYXkKICAgICAgICBEYXlPZldlZWsgZmlyc3REYXlPZldlZWtVcyA9IG5vdwogICAgICAgICAgICAgICAgLndpdGgoV2Vla0ZpZWxkcy5vZihMb2NhbGUuVVMpLmRheU9mV2VlaygpLCAxKQogICAgICAgICAgICAgICAgLmdldERheU9mV2VlaygpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihmaXJzdERheU9mV2Vla1VzKTsKCiAgICAgICAgLy8gRmlyc3QgZGF5IG9mIGEgd2VlayBpbiB0aGUgVUsgaXMgTW9uZGF5CiAgICAgICAgRGF5T2ZXZWVrIGZpcnN0RGF5T2ZXZWVrVWsgPSBub3cKICAgICAgICAgICAgICAgIC53aXRoKFdlZWtGaWVsZHMub2YoTG9jYWxlLlVLKS5kYXlPZldlZWsoKSwgMSkKICAgICAgICAgICAgICAgIC5nZXREYXlPZldlZWsoKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZmlyc3REYXlPZldlZWtVayk7CgogICAgICAgIC8vICMjIyMjIyBUaHVzLCB0aGUgZmlyc3QgYW5kIGxhc3QgZGF5cyBvZiB0aGUgd2VlayBvZiB0aGUgZ2l2ZW4gZGF0ZToKCiAgICAgICAgLy8gSW4gdGhlIFVTCiAgICAgICAgTG9jYWxEYXRlIGRhdGVPbkZpcnN0RGF5T2ZXZWVrVXMgPSBkYXRlLndpdGgoCiAgICAgICAgICAgICAgICBUZW1wb3JhbEFkanVzdGVycy5wcmV2aW91c09yU2FtZShmaXJzdERheU9mV2Vla1VzKSk7CiAgICAgICAgTG9jYWxEYXRlIGRhdGVPbkxhc3RzdERheU9mV2Vla1VzID0gZGF0ZU9uRmlyc3REYXlPZldlZWtVcy5wbHVzRGF5cyg2KTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZGF0ZU9uRmlyc3REYXlPZldlZWtVcyk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGRhdGVPbkxhc3RzdERheU9mV2Vla1VzKTsKCiAgICAgICAgLy8gSW4gdGhlIFVLCiAgICAgICAgTG9jYWxEYXRlIGRhdGVPbkZpcnN0RGF5T2ZXZWVrVWsgPSBkYXRlLndpdGgoCiAgICAgICAgICAgICAgICBUZW1wb3JhbEFkanVzdGVycy5wcmV2aW91c09yU2FtZShmaXJzdERheU9mV2Vla1VrKSk7CiAgICAgICAgTG9jYWxEYXRlIGRhdGVPbkxhc3RzdERheU9mV2Vla1VrID0gZGF0ZU9uRmlyc3REYXlPZldlZWtVay5wbHVzRGF5cyg2KTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZGF0ZU9uRmlyc3REYXlPZldlZWtVayk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGRhdGVPbkxhc3RzdERheU9mV2Vla1VrKTsKICAgIH0KfQ==