java - SimpleDateFormat解析后错误的unix时间戳

标签 java date timezone simpledateformat

我正在尝试使用 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

最佳答案

这都与时区有关。

您已将其指定为午夜UTC,并将其格式化为日期 - 但实际上是柏林时间凌晨 2 点。

然后,您将解析该日期,该日期将解析到该日期柏林的午夜,这比您的出发点早两个小时。如果您想再次恢复午夜 UTC,只需将 SimpleDateFormat 的时区设置为 UTC 时区即可。

关于java - SimpleDateFormat解析后错误的unix时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10505196/

相关文章:

java - java中如何从父对象获取子对象?

java - 将 Base 64 字符串保存为图像文件

java - 如何使用 JNI 将数组 [1+1] 的结构和 FAR PASCAL 的方法从 C 映射到 Java?

mysql - 比较两列(日期)并用最近的日期更新新列?

java - 早期 Android 中 Java 8 之前的 ZonedDateTime 到 Date

PHP 从字符串中解析日期

java - 混淆代码包含相同的成员变量名称

python - 获取LMT信息以及pytz中的所有缩写tz

python - 如何为 django-cities-light country 模型添加资本?

mysql - 在MySQL中存储数据以供按日期范围查询