0

当我在 joda 时间 API 中为某些 julian double 值调用 setJulianDate 方法时,我得到了一个非法参数异常。

JDateTime jdt = new JDateTime(); 
JulianDateStamp jdstamp = new JulianDateStamp(julianDateDouble);
jdt.setJulianDate(jdstamp);
System.out.println(jdt);

什么时候

Double julianDateDouble = (double)2452555.13;

我得到 java.lang.IllegalArgumentException: Value too big: 1000 错误。然而,当

Double julianDateDouble = (double)2452558.67;

双朱利安值正确转换为 2002-10-11 04:04:48.000。我拥有的一堆朱利安日期值也会发生同样的情况。

4

1 回答 1

1

我不确定,但一切似乎都指向浮点数的精度。您可以使用重载的构造函数来JulianDateStamp接受BigDecimal.

BigDecimal julianDateDouble = new BigDecimal("2452555.13");
JDateTime jdt = new JDateTime(); 
JulianDateStamp jdstamp = new JulianDateStamp(julianDateDouble);
jdt.setJulianDate(jdstamp);
System.out.println(jdt);

印刷

2002-10-07 15:07:12.000

这是由这个 Julian Date Converter验证的。

如果您的输入以 a 的形式出现double,请使用

Double dob = (double)2452555.13;
System.out.println(dob);
BigDecimal julianDateDouble = new BigDecimal(dob.toString());
于 2013-10-04T21:31:52.983 回答