儒略日期到常规日期的转换

2024-02-03

如何使用 java API 将代表 2013 年 11 月 18 日的儒略日期 2456606 转换为字符串格式 18/11/2013?我尝试执行下面的代码,但它没有给我正确的答案。欢迎对以下代码进行任何更正

    String j = "2456606";
    Date date = new SimpleDateFormat("yyyyD").parse(j);
    String g = new SimpleDateFormat("dd.MM.yyyy").format(date);
    System.out.println(g);

tl;dr

LocalDate.MIN.with ( 
    java.time.temporal.JulianFields.MODIFIED_JULIAN_DAY , 
    2_456_606L 
)

2013-11-09

其他方向,从现代到儒略日。

 LocalDate.of( 2013 , 11 , 9 )
          .getLong ( java.time.temporal.JulianFields.JULIAN_DAY )

2456606

Details

首先,您的评论:

下面提到的转换器链接中 11 月 18 日的朱利安日期为 2456606 aa.usno.navy.mil/data/docs/JulianDate.php

…是不正确的。该网站返回 2013 年 11 月 9 日的 2456606。

Your 海军网站 http://aa.usno.navy.mil/data/docs/JulianDate.php定义朱利安·达特自公元前 4713 年 1 月 1 日以来的天数,映射到“通用时间”。我想他们的意思是UTC https://en.wikipedia.org/wiki/Coordinated_Universal_Time以及现代 ISO 8601 日历系统。看维基百科 https://en.wikipedia.org/wiki/Julian_day.

Java 中内置的 java.time 类使这一切变得简单。

long input = 2_456_606L;
LocalDate ld = LocalDate.MIN.with ( java.time.temporal.JulianFields.JULIAN_DAY , input );

转储到控制台。

System.out.println ( "input: " + input + " is: " + ld );

输入:2456606 是:2013-11-09

更多讨论请参见我的答案 https://stackoverflow.com/a/38278281/642706关于重复的问题。

反之亦然,将现代日期转换为儒略日。

long output = ld.getLong ( java.time.temporal.JulianFields.JULIAN_DAY );

关于 java.time

The java.time http://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html框架内置于 Java 8 及更高版本中。这些课程取代了麻烦的旧课程legacy https://en.wikipedia.org/wiki/Legacy_system日期时间类,例如java.util.Date https://docs.oracle.com/javase/8/docs/api/java/util/Date.html, Calendar https://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html, & SimpleDateFormat http://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html.

The 乔达时间 http://www.joda.org/joda-time/项目,现在在维护模式 https://en.wikipedia.org/wiki/Maintenance_mode,建议迁移到java.time http://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html类。

要了解更多信息,请参阅甲骨文教程 http://docs.oracle.com/javase/tutorial/datetime/TOC.html。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310 https://jcp.org/en/jsr/detail?id=310.

从哪里获取 java.time 类?

  • Java SE 8 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_8 and SE 9 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_9 and later
    • 内置。
    • 具有捆绑实现的标准 Java API 的一部分。
    • Java 9 添加了一些小功能和修复。
  • Java SE 6 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_6 and SE 7 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_7
    • 许多 java.time 功能都向后移植到 Java 6 和 7三十后端口 http://www.threeten.org/threetenbp/.
  • Android https://en.wikipedia.org/wiki/Android_(operating_system)
    • The 三十ABP https://github.com/JakeWharton/ThreeTenABP项目适应三十后端口(如上所述)专门针对 Android。
    • See 如何使用 ThreeTenABP... https://stackoverflow.com/q/38922754/642706.

The 三十额外 http://www.threeten.org/threeten-extra/项目通过附加类扩展了 java.time。该项目是 java.time 未来可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如Interval http://www.threeten.org/threeten-extra/apidocs/org/threeten/extra/Interval.html, YearWeek http://www.threeten.org/threeten-extra/apidocs/org/threeten/extra/YearWeek.html, YearQuarter http://www.threeten.org/threeten-extra/apidocs/org/threeten/extra/YearQuarter.html, and more http://www.threeten.org/threeten-extra/apidocs/index.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

儒略日期到常规日期的转换 的相关文章

随机推荐