我正在尝试使用SimpleDateFormat在unix时间戳和自定义格式之间进行转换,反之亦然。 为了测试这个反之亦然,我编写了以下测试用例:
public class Testception extends TestCase {
public void testTheTestOrTestception() throws ParseException {
Date datum = new Date(649555200000L);
SimpleDateFormat dfm = new SimpleDateFormat("yyyy-MM-dd");
TimeZone tZ = TimeZone.getTimeZone("Europe/Berlin");
dfm.setTimeZone(tZ);
String aDifferentFormat = dfm.format(datum);
assertEquals("1990-08-02", aDifferentFormat);
Date datum2 = dfm.parse(aDifferentFormat);
assertEquals(649555200000L, datum2.getTime());
}
}
我从一个unixtimestamp(649555200000)开始,以我的自定义格式(“1990-08-02”)转换它,这很好用。但不幸的是第二个断言失败了,而不是预期的649555200000L,结果是649548000000L
提前致谢。
干杯L0rdAli3n
答案 0 :(得分:6)
这与时区有关。
你已经午夜 UTC ,并将其格式化为日期 - 但实际上是柏林时间凌晨2点。
然后你解析那个 date ,它将解析那天在柏林的的午夜,比你的起点早两个小时。如果您想再次返回午夜UTC,只需将SimpleDateFormat
的时区设置为UTC时区。
答案 1 :(得分:1)
代码没有问题,只是输入假设。
649555200000L是1990年8月2日早上2点在柏林。实际结果是柏林午夜的正确值,这是java在将日期字符串模式解析为java.util时会给你的。日期。