Powiedz, że chcę, aby mój tydzień rozpoczął się we wtorek, a dzień powinien rozpocząć się o 5:30 rano.Java8 java.time: jak zmienić dzień tygodnia i godzinę rozpoczęcia dnia?
Oznacza to, kod jak to powinno działać:
// LocalDateTimes created with the "standard" ISO time
LocalDateTime tuesday_4_30 = LocalDateTime.now()
.with(TemporalAdjusters.next(DayOfWeek.TUESDAY))
.withHour(4).withMinute(30);
LocalDateTime tuesday_6_30 = tuesday_4_30.withHour(6).withMinute(30);
LocalDateTime previous_monday = tuesday_4_30.minusDays(1);
// eventual adjustment using TemporalAdjusters here? like this?
// tuesday_4_30 = tuesday_4_30.with(new MyTemporalAdjuster(DayOfWeek.TUESDAY, 5, 30));
// <do the same for 6_30 and previous monday>
// or possibly change some global parameter like Chronology, Locale, or such..
Assert.assertEquals(tuesday_4_30.getDayOfWeek(), DayOfWeek.MONDAY);
Assert.assertEquals(tuesday_6_30.getDayOfWeek(), DayOfWeek.TUESDAY);
// there is 1 week between the previous monday and the next tuesday 6:30
Assert.assertEquals(ChronoUnit.WEEKS.between(previous_monday,tuesday_6_30), 1);
// there is 0 week between the previous monday and the next tuesday 4:30
Assert.assertEquals(ChronoUnit.WEEKS.between(previous_monday,tuesday_4_30), 0);
// 1 day between tuesday_4_30 and tuesday_6_30
Assert.assertEquals(ChronoUnit.DAYS.between(tuesday_4_30,tuesday_6_30), 1);
// 0 day between previous_monday and tuesday_4_30
Assert.assertEquals(ChronoUnit.DAYS.between(previous_monday,tuesday_4_30), 1);
Mam pokusę wykorzystania regulatory czasowe tutaj i jestem pewien, mogę przesunięcie godziny i minuty tak, że dzień zaczyna się o 5: 30, ale nie wiem, jak zmodyfikować początek tygodnia.
Zauważ, że zajrzałem do WeekFields, ale nie mogę zadziałać z ChronoUnit.XXX.between()
, więc nie posunąłem się za daleko. Wygląda na to, że musiałbym napisać własną Chronologię, która wydawała mi się zbyt daleko posunięta.
Czy możesz mi pomóc?
co dzień pomiędzy? Twój kod działa, ponieważ mój przypadek działa dla obu. Ale myślę, że musiałbym zaimplementować te same "dni międzyplanetarne" jako "Tydzień w tygodniu"? – Gui13
Tak, musisz ponownie zastosować wszystkie te metody. Może być lepszy sposób. – assylias