我正在尝试从 api 客户端(移动客户端或邮递员)读取时区,这始终返回 zoneId 作为 Etc/UTC,而不是实际时区 但是当我在本地计算机上运行相同的代码时,我得到了正确的时区,请让我知道如何从请求中读取时区
private ZoneId getRequestTimeZone(ServerRequest request) {
// Check if the "timezone" header is present in the request
List<String> timezoneHeaders = request.headers().header("timezone");
if (!timezoneHeaders.isEmpty()) {
String timezoneHeaderValue = timezoneHeaders.get(0);
try {
return ZoneId.of(timezoneHeaderValue);
} catch (DateTimeException e) {
throw new ResponseStatusException(
HttpStatus.BAD_REQUEST,
"Invalid timezone: " + timezoneHeaderValue
);
}
} else {
// Default to a specific timezone if the header is not present
return ZoneId.systemDefault();
}
}
timezone
不是标准的 http 标头,因此您的代码将转到 else
分支并返回您机器的 ZoneId。
没有标准方法可以从服务器端确定客户端时区,除非客户端明确将此信息放入请求本身。