【发布时间】:2016-07-05 12:42:34
【问题描述】:
我在UTC 时区的数据库中有数据,客户端上有一些特定于时区的逻辑。
决定在用户的时区从服务器返回数据,所以有一个流程:
- 客户端通过javascript检测用户的时区
- 在自定义标头中发送(即
"X-TIMEZONE") - 服务器拦截请求(在
Filter)并为其设置当前时区(每个请求) - 服务器处理转换并将数据返回给他所在时区的用户
所以问题是设置请求范围的时区,它甚至可能吗?
我发现Timezone.setDefault() 通常会为应用程序设置时区。
谢谢。
【问题讨论】:
-
将时区存储在请求范围的 Spring bean 中,并在必要时使用它(处理日期和时间时)。无法在 JVM 中设置请求范围的时区,因为 JVM 本身对范围一无所知。
-
在 Java8 中有一个类 ZonedDateTime。您可以将 zone 传递给 dao 并在其中创建分区日期时间。
-
实际上,
TimeZone.setDefault会影响在该 JVM 中运行的 所有应用程序 的所有线程。这样做只是作为最后的手段。而是传递一个表示所需时区的对象并在可选的时区参数中使用它。