指定ZonedDateTime的时区而不更改实际日期

Mat*_*Mat 2 java timezone date zoneddatetime

我有一个Date对象,它保存一个日期(不是当前日期),我需要以某种方式指定此日期是UTC,然后将其转换为"欧洲/巴黎",即+1小时.

public static LocalDateTime toLocalDateTime(Date date){
    return ZonedDateTime.of(LocalDateTime.ofInstant(date.toInstant(), ZoneOffset.UTC), ZoneId.of("Europe/Paris")).toLocalDateTime();
}
Run Code Online (Sandbox Code Playgroud)

如果日期为"2018-11-08 15:00:00",则将日期转换为"2018-11-08 14:00:00".我需要它从UTC转换到欧洲/巴黎 - 而不是相反.

Kar*_*cki 6

您可以使用ZonedDateTime.withZoneSameInstant()方法从UTC移动到巴黎时间:

Date date = new Date();
ZonedDateTime utc = date.toInstant().atZone(ZoneOffset.UTC);
ZonedDateTime paris = utc.withZoneSameInstant(ZoneId.of("Europe/Paris"));
System.out.println(utc);
System.out.println(paris);
System.out.println(paris.toLocalDateTime());
Run Code Online (Sandbox Code Playgroud)

打印:

2018-11-08T10:25:18.223Z
2018-11-08T11:25:18.223+01:00[Europe/Paris]
2018-11-08T11:25:18.223
Run Code Online (Sandbox Code Playgroud)