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
相关产品推荐
相关产品推荐

