Скажите, что я хочу, чтобы моя неделя началась во вторник, и день должен начаться в 5:30.Java8 java.time: как изменить день недели и время начала дня?
Это означает, что код, как это должно работать:
// 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);
Я соблазн использовать временные регулировочные здесь, и я совершенно уверен, что я мог бы компенсировать часы и минуты, так что день начинается в 5: 30, но я не могу понять, как изменить начало недели.
Обратите внимание, что я просмотрел WeekFields, но я не могу заставить его работать с ChronoUnit.XXX.between()
, поэтому я не зашел слишком далеко. Похоже, мне пришлось бы закодировать мою собственную хронологию, которая казалась слишком удаленной.
Вы можете мне помочь?
насчет дней между ними? Ваш код работает, потому что мой случай работает для обоих. Но я предполагаю, что мне придется реализовать те же «daysBetween», что и ваша «weekBetween»? – Gui13
Да, вам придется переопределить все эти методы. Там может быть лучший способ. – assylias