You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何将日 月 年 时:分:秒格式字符串转换为儒略日期

解决方案

Java 8及以上版本直接用JDK自带的java.time包即可完成全流程,无需手动编写解析逻辑,也不需要引入第三方依赖。


具体实现步骤

1. 定义日期解析格式

你提供的字符串格式对应模板为d MMM yyyy HH:mm:ss.SSS,因为月份是英文缩写,必须指定英文区域避免解析失败。

2. 解析为时间对象后直接读取儒略日数值

java.time.temporal.JulianFields内置了儒略日相关的字段计算逻辑,直接调用即可。


完整代码示例

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.JulianFields;
import java.util.Locale;

public class JulianDateConverter {
    // 定义解析器,全局复用即可,线程安全
    private static final DateTimeFormatter FORMATTER = DateTimeFormatter
            .ofPattern("d MMM yyyy HH:mm:ss.SSS", Locale.ENGLISH);

    public static void main(String[] args) {
        // 测试用例
        String dateStr1 = "7 Jan 2010 23:00:00.000";
        String dateStr2 = "4 Feb 2010 17:40:00.000";

        LocalDateTime dateTime1 = LocalDateTime.parse(dateStr1, FORMATTER);
        LocalDateTime dateTime2 = LocalDateTime.parse(dateStr2, FORMATTER);

        // 获取儒略日(JD,精确到天的整数形式)
        long jd1 = dateTime1.getLong(JulianFields.JULIAN_DAY);
        long jd2 = dateTime2.getLong(JulianFields.JULIAN_DAY);
        
        // 如果需要带小数的儒略日(包含时分秒的偏移,儒略日从每日正午开始计数)
        double jdWithTime1 = dateTime1.getLong(JulianFields.JULIAN_DAY) 
                + (dateTime1.getHour() - 12) / 24.0 
                + dateTime1.getMinute() / 1440.0 
                + dateTime1.getSecond() / 86400.0;

        System.out.println("日期1对应的儒略日:" + jd1);
        System.out.println("日期2对应的儒略日:" + jd2);
    }
}

低版本Java兼容方案

如果使用Java 8以下版本,可以引入Joda Time库,它同样提供了现成的日期解析和儒略日转换方法,核心逻辑和上述实现一致,仅API名称略有区别。


注意:不要使用JDK旧版的SimpleDateFormat和Date类实现,前者存在线程安全问题,且没有内置的儒略日计算能力,需要自己编写计算逻辑,容易出错。

内容的提问来源于stack exchange,提问作者jkwilliams375

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 00:57:05