如何在Quarkus或Spring Boot中为Web应用实现按用户时区处理
为Web应用添加用户专属时区支持的问题
问题背景
我想给Web应用添加时区支持,用户时区既要用于时间显示,也要服务端计算。查了很多Hibernate、Spring Boot相关的博客和StackOverflow帖子,没找到合适方案——大部分只涉及前端显示时区,满足不了我需要把数据库时间转成用户时区做服务端计算的需求。
我试过用Hibernate拦截器,实现带onLoad方法的拦截器,在加载实体后修改日期时间字段,通过全局服务获取的用户时区来调整,但不确定这个方案在生产环境能不能用。
需求
- 每个用户可设置专属时区;
- 时区不仅用于时间显示,还需用于计算:应用有预约模块,时间精度要求高,不能因为服务端和用户时区差异导致预约时间判断错误(比如用户时区已经过了预约时间,但服务端时间还早于预约点)。
核心问题
如何让Hibernate在每个HTTP请求中使用当前用户配置的时区?
技术栈
应用用Hibernate,数据库时间统一存UTC;现在通过配置文件设置统一时区,所有用户共用。我用Quarkus开发,也接受Spring Boot方案,可以自己转换适配。
补充场景(更新1)
应用面向摄影师,支持摄影师和客户共享预约页面。需要根据摄影师设置的本地时区(比如Europe/Warsaw)的工作时间(8:00-16:00)计算可预约时段,涉及夏令时(DST)时,只在后端用UTC处理会出现时间转换错误(比如UTC 7:00在非夏令时是当地8:00,夏令时则是9:00)。
另外,发送预约提醒时,需要在服务端知晓用户时区来计算剩余时间,避免UTC和用户时区差异导致提醒内容错误(比如UTC 20:00对应UTC+12时区次日8:00,此时提醒“您明日有预约”就错了,实际用户的预约在当天)。
内容的提问来源于stack exchange,提问作者Michał Zalewski
相关产品推荐
相关产品推荐

