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

时间:2014-01-28 11:18:29

标签: java datetime java-8 java-time

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

具体来说,这是continuous count of days称为“修改后的朱利安日”的计算,而不是Julian calendar system中的日期。

例如:

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

1 个答案:

答案 0 :(得分:8)

简短回答:

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

说明:

Wikipedia文章将朱利安日的最佳描述作为一个概念。简而言之,它是一个简单的,连续的,从某个时代起的天数,其中所选择的时代赋予变体名称。因此,修改后的朱利安日计为1858年至11月17日。

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

这些字段只能与getLong(TemporalField)一起使用,因为它们会返回一个对int来说太大的数字。如果你调用now.get(JulianFields.MODIFIED_JULIAN_DAY),则会抛出异常:“UnsupportedTemporalTypeException:get()方法的无效字段ModifiedJulianDay,使用getLong()而不是”

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

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

result = input.with(JulianFields.MODIFIED_JULIAN_DAY, 56685);