Мы не получаем полную картину, поэтому мои предложения, возможно, не имеют смысла, но позвольте мне попытаться.
long millisSinceEpoch = 1_555_555_555_555L;
LocalDate date = Instant.ofEpochMilli(millisSinceEpoch)
.atZone(ZoneId.systemDefault())
.toLocalDate();
LocalDate firstDayOfWeek = date.with(DayOfWeek.MONDAY);
LocalDate lastDayOfWeek = date.with(DayOfWeek.SUNDAY);
System.out.println("Week is from " + firstDayOfWeek + " through " + lastDayOfWeek);
Неделя с 2019-04-15 по 2019-04-21
Я предполагаю, что вы хотите недели ISO, то есть понедельник - первый день недели (я думаю, это то, что вам дал ваш код Joda-Time). Если нет, вам нужно ввести объект WeekFields
, как в ответе Бена П. Я полагаю, что вы не хотите конвертировать обратно в long
. A LocalDate
приятнее работать с движением вперед.
Для начала дня:
ZonedDateTime startOfDay = date.atStartOfDay(ZoneId.systemDefault());
System.out.println("Start of day: " + startOfDay);
В моем часовом поясе я получаю:
Начало дня: 2019-04-18T00: 00 + 02: 00 [Европа / Копенгаген]
Опять же, сохраняйте объект ZonedDateTime
вместо преобразования в миллисекунды.
Не рассчитывайте конец дня. Для точки, в которой день переворачивается («полночь»), всегда используйте начало дня.
ZonedDateTime startOfNextDay = date.plusDays(1)
.atStartOfDay(ZoneId.systemDefault());
System.out.println("Day is from " + startOfDay + " inclusive to " + startOfNextDay + " exclusive");
День с 2019-04-18T00: 00 + 02: 00 [Европа / Копенгаген] включительно
2019-04-19T00: 00 + 02: 00 [Европа / Копенгаген] эксклюзив