【发布时间】:2020-09-24 12:57:08
【问题描述】:
在Instant 和LocalDate 之间转换日期时遇到问题。我需要将我的日期更改为当前一周的星期一(如果是星期三,那么我将更改为星期一):
public static Instant getStartDateAsMonday(Instant startTime) {
LocalDate monday = startTime.atZone(ZoneId.systemDefault()).toLocalDate()
.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
startTime = monday.atStartOfDay(ZoneId.systemDefault()).toInstant();
return startTime;
}
当我测试它时...
@Test
public void testGetStartDateAsMonday() {
Instant instant = DateHelperService.getStartDateAsBeginningOnMonday(
Instant.parse("2020-05-27T00:00:00Z"));
assertThat(instant).isEqualTo("2020-05-25T00:00:00Z");
}
...测试没有通过并给出输出:
Expected : 2020-05-25T00:00:00Z
Actual : 2020-05-24T22:00:00Z
我的系统默认时区是GMT+2。当我做atStartOfDay(ZoneId.of("UTC")) 时测试通过了,但我不明白为什么我不能在该转换中使用我的系统默认值。
【问题讨论】:
标签: java datetime java-time datetime-conversion