Java日期对象:夏令时

时间:2012-05-25 15:54:34

标签: java datetime date timezone dst

我有一个基于客户端服务器的java应用程序。客户端在美国/太平洋时区运行,服务器在UTC中运行(我以UTC格式保存数据库中的时间)

因此,例如,如果我将日期保存为太平洋时间的09:00,那么它将在14:00时将其保存在数据库中。

当我从数据库读回这个时间时,夏令时被应用,现在它被转换为太平洋时间08:00而不是09:00。

因此,当从太平洋时间转换为UTC时,不会考虑夏令时,但是当从UTC转换回太平洋时,会应用不一致的情况。

在DB中,列类型为TIME,在java中我将其读入日期对象。

我该如何处理?

3 个答案:

答案 0 :(得分:0)

通常情况下,数据库服务器决定时间,是否应用夏令时,以及时区,UTC是标准。

建议:

  1. 也许您希望将客户端的时间设置为字符串字段,其中包含PST,EST或其他时区的其他字段。
  2. 为时区创建一个字段,并计算显示给客户端的时间。

答案 1 :(得分:0)

我认为你能做的最好的事情是确保尽可能多的时间处理完全没有时区。例如,自Unix Epoch以来的millis。然后,您只在将时区数据显示给用户之前应用它。

因此,在这种情况下,当您向服务器报告以及从服务器检索时,请不要应用任何本地时间假设。这样,就不可能对数据进行不匹配的时区或DST处理。

答案 2 :(得分:0)

除此之外,我建议你手动使用getLong并自己构建Date对象。