如何将Java中的DMYHH:MM:SS字符串转换为Julian Date

我在 Java 中有一些字符串,格式为:Day Month Year Hour:Minute:Second

我在 Java 中有一些字符串,格式为:Day Month Year Hour:Minute:Second

7 Jan 2010 23:00:00.000
4 Feb 2010 17:40:00.000

解析此字符串并将值转换为其结果 Julian Dates 的最简单方法是什么?我正在从 Excel 中读取这些字符串,因此它们不是具有任何转换 / 格式化实用程序(只是原始字符串)的对象。是否有一个简单的库或函数调用来转换这些,或者我必须手动编写解析器?谢谢

2

我的库Time4J支持Julian Dates开箱即用。

    ChronoFormatter<PlainTimestamp> f =
        ChronoFormatter.ofTimestampPattern(
            "d MMM uuuu HH:mm:ss.SSS", PatternType.CLDR, Locale.ENGLISH);
    Moment j2000 = f.p("7 Jan 2010 23:00:00.000").atUTC(); // are your timestamps really UTC?
    // eventually also: ".in(Timezone.ofSystem());"
    System.out.println(JulianDay.ofSimplifiedTime(j2000)); // programmer's standard
    // JD(POSIX)2455204.4583333335
    System.out.println(JulianDay.ofEphemerisTime(j2000)); // astronomical definition
    // JD(TT)2455204.459099352

优势:

没有复杂的计算你的拥有。

支持时间尺度 TT 上的天文定义。

显式显示时区依赖关系(无论您选择什么)。

1

java.时间

当然,Java 有一个内置的日期和时间解析器,DateTimeFormatter类(之所以这样命名,是因为它也可以将日期和时间格式化为字符串)。还有许多类可以利用它来生成自己的对象。在您的情况下,您需要LocalDateTime类。LocalDateTime是一天中的日期和时间,没有时区或与 UTC 数据的偏移量,因此适合保存。

这个格式化程序对你的字符串有好处:

private static final DateTimeFormatter FORMATTER
        = DateTimeFormatter.ofPattern("d MMM uuuu HH:mm:ss.SSS", Locale.ENGLISH);

编辑:您在评论中写道:

将 Jan 7 2010 小时 23 插入此计算器:aavso.org/jd-calculator返回 2455204.45833。这会是确切的 Julian Date 吗?我相信你的解决方案是给 Day 而不是 Date 十进制值

是的,这是完全正确的。修改后的代码以获取包括分数的 julian 日期是:

    String source = "7 Jan 2010 23:00:00.000";
    
    LocalDateTime ldt = LocalDateTime.p(source, FORMATTER);
    // Subtract half a day to compensate for the
    // fact that the Julian day begins at noon
    LocalDateTime dateToUseForJulianDay = ldt.minusHours(12);
    long julianDayNumber = dateToUseForJulianDay.getLong(JulianFields.JULIAN_DAY);
    double juianDateFraction = (double) dateToUseForJulianDay.getLong(ChronoField.NANO_OF_DAY)
            / (double) Duration.ofDays(1).toNanos();
    double julianDate = julianDayNumber + juianDateFraction;
    
    System.out.println("Julian date: " + julianDate);

和输出是在这个例子中:

朱利安日期:2455204.4583333335

它与您从在线计算器中引用的结果非常吻合。

Julian day number 是自公元前 4713 年 1 月 1 日以来的日编号。Julian day 从中午开始,Java 没有考虑到这一点,因此作为黑客,我减去了 12 个小时以补偿并获得一天中所有时间的正确日期。由于getLong()方法仅将 Julian 日编号作为整数,因此我需要分别找到分数。从每天的纳秒数减去

更多链接:上的Julian day

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(1)
如何使用链接 /api加入新的Google组
上一篇
Inno Setup"源文件 C:\ Windows\ System32\ vcruntime140_1.dll不存在" 错误
下一篇

相关推荐

  • java编程技术大全pdf下载从入门到精通

    Java编程技术大全PDF下载是一种可以帮助开发者学习和提高Java编程技能的资料。它涵盖了Java编程语言、Java EE、Java SE、Java ME、JVM、JDBC、JSP、Servlet等多个方面的内容,可以帮助开发者更好地理解和掌握Java编程技术。…

    2023-06-16 10:44:04
    0 90 87
  • java中static修饰的变量:静态变量在Java中的应用

    static修饰的变量是一个静态变量,也称为类变量,它属于类,而不属于某个对象。静态变量在内存中只有一个副本,所有的对象共享这一个副本。…

    2023-04-16 09:28:00
    0 41 53
  • java插入排序:如何使用Java实现插入排序

    插入排序是一种简单的排序算法,它通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。Java代码如下:…

    2023-04-02 03:13:27
    0 50 58
  • php跟java有什么区别编程语言特性比较

    示例示例语言特性:PHP是一种弱类型的脚本语言,变量不需要声明类型,可以直接赋值;而Java是一种强类型的语言,变量必须声明类型,才能使用。…

    2023-10-31 06:04:23
    0 11 83
  • java与jsp:如何使用Java和JSP构建功能强大的Web应用

    示例示例Java和JSP是两种不同的技术,它们都是用于开发Web应用程序的重要工具。Java是一种面向对象的编程语言,用于编写可在多种平台上运行的跨平台应用程序。它可以用于开发各种类型的应用程序,包括桌面应用程序、服务器端应用程序和Web应用程序。Java应用程序通常使用Java类库来实现其功能。…

    2023-06-15 13:33:03
    0 15 25
  • java小程序源码:如何使用Java小程序实现功能强大的应用

    示例示例Java小程序源码是指使用Java语言开发的小程序,它可以运行在Java虚拟机上。下面是一个简单的Java小程序源码示例:…

    2023-05-11 09:27:45
    0 95 40
  • java实现多线程的两种方式:使用Java实现多线程的两种方式

    示例示例Java实现多线程的两种方式:继承Thread类:…

    2023-06-13 07:43:19
    0 92 46
  • java获取请求头信息实现HTTP客户端的功能

    示例示例Java获取请求头信息的方法如下:通过对象的(String name)方法来获取请求头信息,其中name参数是要获取的请求头的名字,返回值是一个字符串,表示请求头对应的值。…

    2023-04-07 11:10:57
    0 67 63

发表评论

登录 后才能评论

评论列表(9条)