【发布时间】:2019-09-30 23:00:45
【问题描述】:
我有一个带有控制器的 spring-boot 应用程序,该控制器处理一些请求,其日期作为查询参数传递。例如请求的 URI:
http://localhost:8081/test/read?from=2018-01-01T00:00:00Z
但是,使用 @RequestParam 注释从 URI 中解析日期,我得到的是本地时区的日期,而不是 UTC 时区(如“Z”所示)。
我尝试在 application.properties 中设置 jdbctemplate 时区、java.util.timezone 和 spring.jackson.time_zone,但这并没有帮助。
@RequestMapping(value = "test/read", method = RequestMethod.GET)
public ResponseEntity<String> get(
@RequestParam(value="from") @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss'Z'") final Date from)
// value of date in 'from' is in local timezone
由于传递给 @DateTimeFormat 的模式中的尾随“Z”,该值应位于 UTC 时区。
对我在这里缺少的东西有什么想法吗?
【问题讨论】:
-
A
java.util.Date没有时区,它是一个 long 的包装器,包含自 1970 年 1 月 1 日 00:00 UTC 以来的毫秒数。它的默认toString()将呈现默认JVM 时区中的值。您可能需要考虑改用java.time类。
标签: java spring-boot