Java 如何获取指定时区的时间?

Java 如何获取指定时区的时间?,java,timezone,jodatime,web-project,Java,Timezone,Jodatime,Web Project,我把我的项目放在一个与我所在的时区不同的主机上 在我的web项目中,我使用“时间戳”将时间插入数据库。所以我需要知道芝加哥的时间(我的时区) 我过去常常得到不同时区的时间 我的代码如下: DateTime dt = new DateTime(); DateTime dtChicago =dt.withZone(DateTimeZone.forID("America/Chicago")); java.sql.Timestamp timeStamp = new java.sq

我把我的项目放在一个与我所在的时区不同的主机上

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

我过去常常得到不同时区的时间

我的代码如下:

    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());

那么,我如何才能得到准确的“芝加哥”时区时间并将其注入时间戳呢?

我发现下面的打印时间是相同的毫秒数

你不觉得这有道理吗?我现在所在的时间可能与你所在的时间不同,但从那以后经过的时间是相同的

时间戳就是这个时间量。它没有时区的概念。你可以直接把它存起来


当您需要将其格式化以向用户显示时,您将提供一个时区,转换将负责执行时区的时间差。

您不能将时区放入时间戳对象中。当与数据库交互时,您需要为
PreparedStatement
ResultSet
提供
日历。
日历
需要设置为希望数据存储在数据库中的时区。将所有数据标准化为UTC对于处理来自多个时区的数据具有许多优势。它还消除了重复一个小时时DST造成的“模糊小时”。

您可以使用该方法获得指定时区的时间


时间戳没有时区的概念。
DateTime.getMillis()
始终返回相同的值,无论您设置的时区是什么。。。它返回自“1970-01-01T00:00:00Z”以来的毫秒数。为什么不存储时间戳,然后在显示/使用该值时转换为正确的时区?使用格式化程序在所需的时区中格式化时间戳
long europeMillis = DateTimeZone.forID("Europe/London").convertUTCToLocal(dt.getMillis());  
long americaMillis = DateTimeZone.forID("America/Chicago").convertUTCToLocal(dt.getMillis());