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)
简短回答:
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日变化:
JulianFields.MODIFIED_JULIAN_DAY - 标准的改良朱利安日JulianFields.JULIAN_DAY - 基于午夜的标准朱利安日概念的变体JulianFields.RATA_DIE - 基于格里高利时代的朱利安日变异ChronoField.EPOCH_DAY - 基于标准Java/UNIX 1970-01-01的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)
| 归档时间: |
|
| 查看次数: |
1646 次 |
| 最近记录: |