java - 将纪元以来的毫秒数转换为 1582 年之前的日历日期时出现问题

标签 java elasticsearch

我需要从 java 中存储为 1581 年 5 月 14 日的 elasticsearch 获取日期。我有来自elasticsearch的日期,以毫秒为单位(-12264134400000)。在Java中转换为日期时,日期计算错误。我知道这与格鲁吉亚和儒略历有关,但无法找到解决方案。我使用的代码很简单:

Date dt = new Date(-12264134400000L);

上面给出的是 04-May-1581 而不是 14-May-1581。

为了提供更多详细信息,我在 Oracle 数据库中输入了许多此类日期,这些日期已移至 Elasticsearch。我从 Elasticsearch 获取日期的方式以毫秒为单位(这就是它从 lucene 索引读取的方式。将其视为约束)。所以我想将毫秒转换回原始日期,以便我可以将其与另一个日期进行比较。因此,如果elasticsearch将14-May-1581转换为-12264134400000,我想要14-May-1581回来。

最佳答案

您应该使用 Java 8 中引入的 java.time 包:

LocalDate date = 
    Instant.ofEpochMilli(longValue).atZone(ZoneId.systemDefault()).toLocalDate();

这给出了预期的结果

关于java - 将纪元以来的毫秒数转换为 1582 年之前的日历日期时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56219104/

相关文章:

java - 无法使用 log4j2 创建日志文件

elasticsearch - 如何保护 Titan - Elasticsearch 与 ssl/tls 的连接?

Elasticsearch 查询性能

arrays - Elasticsearch : Index Mapping for integer array

java - Spring引导创建名为错误的bean时出错

java - 如何配置 activemq 队列,使其不使用默认的死信队列来处理过期消息

java - 使用 Java HTTPS 登录

java - 这是什么意思以及如何修复 SonarQube Java 问题 "Cycles between packages should be removed"(鱿鱼 :CycleBetweenPackages)

Elasticsearch 通过多个索引上的 uid 获取多个文档

heroku - 连接到 Elasticsearch Heroku 数据库