java Joda DateTime到时间戳的转换
我试图在Joda中通过DateTimeZone
更改Timestamp
的值:
DateTime dt = new DateTime(rs.getTimestamp("anytimestampcolumn"),
DateTimeZone.forID("anytimezone"));
Timestamp ts = new Timestamp(dt.getMillis());
对于
DateTime
,值为:2013-04-13T22:56:27.000+03:00
对于
TimeStamp
,值为:2013-04-13 22:56:27.0
Timestamp
的到来没有时区差异
如何获得正确的时区时间戳 例如,我想得到“2013-05-13 01:56:27.0”
提前谢谢
编辑:使用MySQL,列类型是TIMESTAMP
当然,rs
是ResultSet
# 1 楼答案
事实上,这不是一个重复的问题。这就是我在几次之后解决问题的方法:
这是从所需时区获取偏移量的方法
让我们回到我们的代码,我们从查询结果集中获取时间戳,并将其与时区一起使用来创建日期时间
现在,我们将把偏移量添加到datetime,并从中获取时间戳
也许这不是得到它的实际方法,但它解决了我的问题。我希望它能帮助任何被困在这里的人
# 2 楼答案
时间(一个可测量的第四维度)在全世界是不同的,这是一个常见的误解。时间戳作为时间中的一个时刻是唯一的。然而,日期会影响我们“看”时间的方式,但实际上它是“一天中的时间”
例如:两个人同时看钟。时间戳是一样的,对吗? 但其中一个在伦敦,中午12:00(格林尼治标准时间,时区偏移量为0),另一个在贝尔格莱德,下午14:00(CET,中欧,现在夏时制,偏移量为+2)
他们的看法不同,但时间是一样的
您可以在this answer中找到更多详细信息强>
更新
好的,它不是this question的副本,但它毫无意义,因为您混淆了术语“时间戳=时间时刻(客观)”和“日期[时间]=一天中的时间(主观)”
让我们看一下您的原始问题代码,如下所示:
我还没有运行此代码,但我确信它每次都会打印
true
和相同的毫秒数:但正如您自己所说,将它们打印为字符串将导致“不同”的时间,因为
DateTime
应用了时区。这就是为什么“时间”被存储和传输为Timestamp
对象(基本上是包装一个long
)并显示或输入为Date[Time]
在你自己的回答中,你人为地增加了一个偏移量,并创造了一个“错误”的时间。 如果使用该时间戳创建另一个
DateTime
并将其打印出来,它将偏移两次另外,如果你有时间,通过非常复杂的Joda Time source code看看它是如何保存时间(毫秒)的,以及它是如何打印时间的
JUnit测试作为证明
# 3 楼答案
# 4 楼答案
我用这种方法解决了这个问题
通过这种方式,您可以忽略强制选择时区的服务器时区