Из других ответов, опубликованных до сих пор, неясно, как они справляются с летним временем (DST) и другими аномалиями времени. И они делают это по-другому. Чтобы было яснее, что вы хотите 18.30 на прошлой неделе, если время сейчас 18.30, независимо от того, произошел ли переход к летнему времени или из него, я предлагаю использовать ZonedDateTime
:
System.out.println("Now: " + Instant.now());
Instant aWeekAgo = ZonedDateTime.now(ZoneId.of("Europe/Madrid"))
.minusWeeks(1)
.toInstant();
System.out.println("A week ago in Spain: " + aWeekAgo);
Поскольку летнее время в Испании не заканчивалось и не начиналось в течение последней недели, запуск кода только что дал такое же время дня и в UTC (что печатает Instant
):
Now: 2018-09-13T09:46:58.066957Z
A week ago in Spain: 2018-09-06T09:46:58.102680Z
Я верю, что вы адаптируете идею к своему коду.