如何在Java中将字符串日期转换为Unix纪元?

问题描述 投票:-1回答:1

我想将字符串“ 01/01/1900”(dd / MM / yyyy)转换为一个长值,表示从“ 01/01/1970”(dd / MM / yyyy)起的毫秒数。

我在这里尝试过:

long value = LocalDate //
               .parse("01/01/1900", DateTimeFormatter.ofPattern("dd/MM/yyyy")) //
               .atStartOfDay(ZoneId.of("UTC")) //
               .toInstant() //
               .toEpochMilli() //
            ;

但是,实际值为-2208992400000。期望值为-2208988800000

我想念什么?

java date type-conversion timestamp date-conversion
1个回答
-1
投票

您没有运行粘贴的代码。

我与您所在的时区(欧洲中部)处于同一时区,而当我运行此确切的代码时,答案是-2208988800000,正如您所期望的那样。

即使您弄乱了本地时区设置,与情况无关。代码段中的代码完全不依赖于系统默认时区。将字符串转换为LocalDate实例无关紧要,通过提供显式区域将LocalDate转换为ZonedDateTime无关紧要,然后将其转换为即时信息则无关紧要。 (而瞬间首先只是一个围绕千纪的包装纸,因此读取一个字段也无关紧要)。

可能您的系统的时区表已损坏,由于此tz数据已损坏,因此未在系统上正确定义时区“ UTC”。

请注意,这可行:

.atStartOfDay(ZoneOffset.UTC)

而且更惯用,我想是“更安全”。它避免了查找,并且避免了您可以使用fingerfinger的字符串。试一试,尽管我当然会担心损坏的tzdata文件。

© www.soinside.com 2019 - 2024. All rights reserved.