问题描述
我正在创建一个使用其他服务的新REST服务。对于每个请求,我都必须包含当前日期,并且该当前日期一定不能是过去的日期。
我正在使用LocalDate.Now()
来获取当前日期
问题是我不知道最终用户的时区,我用CEST时区来调用后端服务
由于对UTC的CEST是+2,因此如果用户在fx 9 AUG 23:00发送了新请求,则该请求将以日期8 AUG进入后端服务,但当天将是10 AUG 01: 00
如何将LocalDate.Now()转换为CEST / CET LocalDate.Now()?
解决方法
无法从HTTP请求中找到用户的时区:例如
- How to detect the timezone of a client?
- Is there another way to get a user's time zone from a HttpServletRequest object in Spring MVC?
一种解决方案是将用户的首选时区存储在用户的个人资料中,方法与存储名称,电子邮件地址和其他内容的方式相同。另一种解决方案是在客户端代码中找到时区,并将其作为请求参数传递。第三种解决方案(最不可靠)是对用户的IP地址进行地理定位。
找到时区后,在该时区中找到LocalDate
很容易:
String userTimeZone = "Europe/Paris";
LocalDate userLocalDate = LocalDate.now(ZoneId.of(userTimeZone));