如何利用 LocalDate.toEpochDay() 函数将日期换算为距离公元1年的天数?
- 内容介绍
- 相关推荐
本文共计665个文字,预计阅读时间需要3分钟。
`LocalDate.toEpochDay()` 返回的是从 `1970-01-01`(ISO纪元起始日)到指定日期之间的完整天数,而不是自约定纪元以来的天数——它不支持自定义纪元。如果你看到约定纪元这个词,很可能是在混淆Java中的 `EpochDay` 概念和某些领域(如金融协议、区块链时间戳)中自行约定的起始日。Java的 `EpochDay` 是基于ISO标准,不能更改起始日。
为什么 toEpochDay() 固定以 1970-01-01 为基准
这是 ISO 8601 和 Java Time API 的硬性约定:LocalDate 的纪元(epoch)就是 1970-01-01,且不可更改。调用 toEpochDay() 本质是计算该日期与这个固定起点的天数差。
- 例如:
LocalDate.of(1970, 1, 1).toEpochDay()→0 -
LocalDate.of(1970, 1, 2).toEpochDay()→1 -
LocalDate.of(1969, 12, 31).toEpochDay()→-1
如果真要换算成“自某协定日”的天数,得手动偏移
Java 没有内置“自定义纪元的 toEpochDay”,但你可以用 ChronoUnit.DAYS.between() 或直接减法完成等效计算。
本文共计665个文字,预计阅读时间需要3分钟。
`LocalDate.toEpochDay()` 返回的是从 `1970-01-01`(ISO纪元起始日)到指定日期之间的完整天数,而不是自约定纪元以来的天数——它不支持自定义纪元。如果你看到约定纪元这个词,很可能是在混淆Java中的 `EpochDay` 概念和某些领域(如金融协议、区块链时间戳)中自行约定的起始日。Java的 `EpochDay` 是基于ISO标准,不能更改起始日。
为什么 toEpochDay() 固定以 1970-01-01 为基准
这是 ISO 8601 和 Java Time API 的硬性约定:LocalDate 的纪元(epoch)就是 1970-01-01,且不可更改。调用 toEpochDay() 本质是计算该日期与这个固定起点的天数差。
- 例如:
LocalDate.of(1970, 1, 1).toEpochDay()→0 -
LocalDate.of(1970, 1, 2).toEpochDay()→1 -
LocalDate.of(1969, 12, 31).toEpochDay()→-1
如果真要换算成“自某协定日”的天数,得手动偏移
Java 没有内置“自定义纪元的 toEpochDay”,但你可以用 ChronoUnit.DAYS.between() 或直接减法完成等效计算。

