您需要将时间戳转换为具有指定时区的日期时间。下面给出了一些这样做的方法。
使用ZonedDateTime#withZoneSameInstant:
import java.time.ZoneId;
import java.time.ZonedDateTime;
class Main {
public static void main(String[] args) {
String timestamp = "2021-02-17T16:18:00.00Z";
ZonedDateTime zdt = ZonedDateTime.parse(timestamp);
ZonedDateTime zdtAtCet = zdt.withZoneSameInstant(ZoneId.of("Europe/Paris"));
System.out.println(zdtAtCet);
}
}
现在,您可以在代码中使用OffsetDateTime 的对应对象,例如
<div th:text="${#temporals.format(zdtAtCet, 'dd/MM/yyyy HH:mm')}"></div>
ZonedDateTime 旨在自动调整由于夏令时导致的与 UTC 的偏移量变化。
如果您要处理与 UTC 的固定偏移量,例如UTC+01:00,也可以使用OffsetDateTime#withOffsetSameInstant 例如
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
class Main {
public static void main(String[] args) {
String timestamp = "2021-02-17T16:18:00.00Z";
OffsetDateTime odt = OffsetDateTime.parse(timestamp);
OffsetDateTime odtAtUtcPlus1 = odt.withOffsetSameInstant(ZoneOffset.of("+01:00"));
OffsetDateTime odtAtUtcPlus2 = odt.withOffsetSameInstant(ZoneOffset.of("+02:00"));
System.out.println(odtAtUtcPlus1);
System.out.println(odtAtUtcPlus2);
}
}
输出:
2021-02-17T17:18+01:00
2021-02-17T18:18+02:00
您也可以使用Instant#atZone 和Instant#atOffset 分别执行上述第一个和第二个解决方案,例如
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
class Main {
public static void main(String[] args) {
String timestamp = "2021-02-17T16:18:00.00Z";
Instant instant = Instant.parse(timestamp);
OffsetDateTime odtAtUtcPlus1 = instant.atOffset(ZoneOffset.of("+01:00"));
ZonedDateTime zdtAtCet = instant.atZone(ZoneId.of("Europe/Paris"));
System.out.println(odtAtUtcPlus1);
System.out.println(zdtAtCet);
}
}
输出:
2021-02-17T17:18+01:00
2021-02-17T17:18+01:00[Europe/Paris]
从 Trail: Date Time 了解有关现代日期时间 API 的更多信息。