0

我把我的项目放在时区与我所在的地方不同的主机上。

在我的网络项目中,我使用“时间戳”将时间插入到我的数据库中。所以我需要得到芝加哥的时间(我的时区)。

我使用jode time来获取不同时区的时间。

我的代码如下:

    DateTime dt = new DateTime();
    DateTime dtChicago =dt.withZone(DateTimeZone.forID("America/Chicago"));
    java.sql.Timestamp timeStamp = new java.sql.Timestamp(dtChicago.getMillis());

但是,当我测试它时,我发现以下打印相同的毫秒数

     DateTime dtLondon = dt.withZone(DateTimeZone.forID("Europe/London"));
     System.out.println(dtLondon.getMillis());
      DateTime dtChicago = dt.withZone(DateTimeZone.forID("America/Chicago"));
     System.out.println(dtChicago.getMillis());

那么如何获得确切的“芝加哥”时区时间并将其注入时间戳?

4

3 回答 3

2

I found the follows print the same milliseconds

这对你来说没有意义吗?我现在所处的时间可能与您所处的时间不同但自Unix 纪元以来经过的时间量是相同的。

时间戳就是那个时间量。它没有时区的概念。您可以直接存储它。

当您需要对其进行格式化以将其显示给您的用户时,您将提供一个时区,并且转换将负责执行该时区的时差。

于 2014-07-01T22:09:32.863 回答
0

您可以使用DateTimeZone::convertUTCToLocal方法 获取指定时区的时间

long europeMillis = DateTimeZone.forID("Europe/London").convertUTCToLocal(dt.getMillis());  
long americaMillis = DateTimeZone.forID("America/Chicago").convertUTCToLocal(dt.getMillis());
于 2014-07-02T08:38:49.793 回答
0

您不能将 TimeZone 放入 Timestamp 对象中。与数据库交互时,您需要为Calendar设置aPreparedStatement和从 a获取提供 a ResultSetCalendar需要设置为您希望将数据存储在数据库中的 TimeZone 。将所有数据标准化为 UTC 为处理来自多个时区的数据提供了许多优势。它还消除了重复一个小时时由 DST 引起的“模糊小时”。

于 2014-07-02T00:31:34.637 回答