我正在从rest api标头读取时区,而不是给出本地时区,它总是给出Etc/Utc

问题描述 投票:0回答:1

我正在尝试从 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();
        }
    }

java spring-boot datetime timezone spring-webflux
1个回答
0
投票

timezone
不是标准的 http 标头,因此您的代码将转到
else
分支并返回您机器的 ZoneId。

没有标准方法可以从服务器端确定客户端时区,除非客户端明确将此信息放入请求本身。

© www.soinside.com 2019 - 2024. All rights reserved.