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

问题描述 投票:0回答:3

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

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

我使用Joda 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());

那么我怎样才能获得准确的“芝加哥”时区时间并将其注入时间戳呢?

java timezone jodatime
3个回答
2
投票

我发现以下打印相同的毫秒

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

时间戳就是时间量。它没有时区的概念。拿到手后就可以直接保存了。

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


0
投票

您不能将 TimeZone 放入 Timestamp 对象中。与数据库交互时,您需要为

Calendar
中的 setting 和从
PreparedStatement
中获取 提供 ResultSet
。需要将 
Calendar
 设置为您希望将数据存储在数据库中的时区。将所有数据标准化为 UTC 为处理来自多个时区的数据带来了许多优势。它还消除了重复一个小时时由 DST 引起的“模糊时间”。


0
投票
您可以使用

DateTimeZone::convertUTCToLocal 方法获取指定时区的时间

long europeMillis = DateTimeZone.forID("Europe/London").convertUTCToLocal(dt.getMillis()); long americaMillis = DateTimeZone.forID("America/Chicago").convertUTCToLocal(dt.getMillis());
    
© www.soinside.com 2019 - 2024. All rights reserved.