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

Java 在JSR-310中计算修改后的朱利安日,java,datetime,java-8,java-time,Java,Datetime,Java 8,Java Time,如何从JSR-310类(如LocalDate)计算修改后的朱利安日?(在JDK 8中) 具体来说,这是被称为“修改的朱利安日”的计算,而不是中的日期 例如: LocalDate date = LocalDate.now(); long modifiedJulianDay = ??? 简短答复: LocalDate date = LocalDate.now(); long modifiedJulianDay = date.getLong(JulianFields.MODIFIED_JULIAN_

如何从JSR-310类(如
LocalDate
)计算修改后的朱利安日?(在JDK 8中)

具体来说,这是被称为“修改的朱利安日”的计算,而不是中的日期

例如:

LocalDate date = LocalDate.now();
long modifiedJulianDay = ???
简短答复:

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

这篇文章最好地描述了朱利安日的概念。简单地说,它是一个简单的、连续的、从某个时代算起的天数,在这个时代中,所选的时代为变化命名。因此,修改后的朱利安日从1858年11月17日开始计算

JSR-310日期和时间对象实现了定义方法
get(TemporalField)
getLong(TemporalField)
的接口。这些允许查询日期/时间对象的特定时间字段。提供了四种现场实施方式,提供朱利安日变体:

  • -标准修改版朱利安日
  • -标准朱利安日概念的午夜变化
  • -基于公历纪元的儒略日变化
  • -基于标准Java/UNIX 1970-01-01的儒略日变化
这些字段只能与
getLong(TemporalField)
一起使用,因为它们返回的数字对于
int
来说太大。如果调用
now.get(JulianFields.MODIFIED\u JULIAN\u DAY)
则会引发异常:“UnsupportedTemporalTypeException:无效字段ModifiedJulianDay for get()方法,请改用getLong()

请注意,JSR-310只能提供来自的整数,因此无法表示一天中的时间,并且这些数字都基于午夜。计算也使用当地午夜,而不是UTC,这应予以考虑

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


你知道如何把它转换成另一种方式吗?从修改的Julian日期到LocalDate?LocalDate日期=LocalDate.MIN.with(JulianFields.Modified_Julian_DAY,56685);
result = input.with(JulianFields.MODIFIED_JULIAN_DAY, 56685);