【问题标题】:Calculate Modified Julian Day in JSR-310在 JSR-310 中计算修改后的儒略日
【发布时间】:2014-01-28 11:18:28
【问题描述】:

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

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

例如:

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

【问题讨论】:

    标签: java datetime java-8 java-time


    【解决方案1】:

    简答:

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

    解释:

    Wikipedia 文章对儒略日作为一个概念进行了最好的描述。简而言之,它是从某个时期开始的简单、连续的天数,所选时期为变化命名。因此,修改后的儒略日从 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);
    

    【讨论】:

    • 你知道如何反过来转换它吗?从修改后的儒略日期到 LocalDate?
    • LocalDate 日期 = LocalDate.MIN.with(JulianFields.MODIFIED_JULIAN_DAY, 56685);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 1970-01-01
    相关资源
    最近更新 更多