6

如何从 JSR-310 类计算修正儒略日,例如LocalDate?(在 JDK 8 中)

具体来说,这是计算被称为“修改儒略日”的连续天数,而不是儒略历系统中的日期。

例如:

LocalDate date = LocalDate.now();
long modifiedJulianDay = ???
4

1 回答 1

8

简短的回答:

LocalDate date = LocalDate.now();
long modifiedJulianDay = date.getLong(JulianFields.MODIFIED_JULIAN_DAY);

解释:

维基百科的文章对儒略日作为一个概念给出了最好的描述。简而言之,它是从某个时期开始的简单、连续的天数,所选时期为变化命名。因此,修改后的儒略日从 1858 年 11 月 17 日开始计算。

JSR-310 日期和时间对象实现了TemporalAccessor定义方法的接口get(TemporalField)getLong(TemporalField). 这些允许查询日期/时间对象以获取特定的时间字段。提供了四种字段实现,提供儒略日变化:

这些字段只能与一起使用,getLong(TemporalField)因为它们返回的数字对于int. 如果您调用now.get(JulianFields.MODIFIED_JULIAN_DAY),则会引发异常:“UnsupportedTemporalTypeException: Invalid field ModifiedJulianDay for get() method, use getLong() instead”

请注意,JSR-310 只能提供来自TemporalField的整数,因此无法表示时间,并且数字都是基于午夜的。计算还使用当地午夜,而不是 UTC,应将其考虑在内。

这些字段还可用于使用以下方法更新日期/时间对象Temporal

result = input.with(JulianFields.MODIFIED_JULIAN_DAY, 56685);
于 2014-01-28T11:18:28.783 回答