在JSR-310中计算修改过的朱利安日

Jod*_*hen 6 java datetime java-8 java-time

如何从JSR-310类中计算修改过的Julian日LocalDate?(在JDK 8中)

具体来说,这是连续天数的计算,称为"修改的朱利安日",而不是儒略历系统中的日期.

例如:

LocalDate date = LocalDate.now();
long modifiedJulianDay = ???
Run Code Online (Sandbox Code Playgroud)

Jod*_*hen 8

简短回答:

LocalDate date = LocalDate.now();
long modifiedJulianDay = date.getLong(JulianFields.MODIFIED_JULIAN_DAY);
Run Code Online (Sandbox Code Playgroud)

说明:

维基百科的文章给出了儒略日的最好描述为一个概念.简而言之,它是一个简单的,连续的,从某个时代起的天数,其中所选择的时代赋予变体名称.因此,改良朱利安日计数从1858-11-17.

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

这些字段只能用于,getLong(TemporalField)因为它们返回的数字太大而无法使用int.如果你调用now.get(JulianFields.MODIFIED_JULIAN_DAY)那么将抛出异常:"UnsupportedTemporalTypeException:无效字段ModifiedJulianDay for get()方法,使用getLong()代替"

请注意,JSR-310只能提供整数TemporalField,因此无法表示时间,数字全部基于午夜.计算也使用当地的午夜,而不是UTC,这应该被考虑在内.

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

result = input.with(JulianFields.MODIFIED_JULIAN_DAY, 56685);
Run Code Online (Sandbox Code Playgroud)