2013-10-04 79 views
0

我在某些julian double值的joda時間API中調用setJulianDate方法時收到非法參數異常。Joda setJulian非法參數異常

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

Double julianDateDouble = (double)2452555.13; 

我得到的java.lang.IllegalArgumentException異常:值過大:1000錯誤。但是,

Double julianDateDouble = (double)2452558.67; 

正確地將雙朱連值轉換爲2002-10-11 04:04:48.000。對於我所擁有的一系列朱利安日期值也是如此。

+1

我相信這是與如何'數量2452555.13'和其他內存中表示的事情。該格式的毫秒值似乎達到1000,無法正確顯示,因此會拋出'IllegalArgumentException'。 –

+0

@SotiriosDelimanolis你知道解決這個問題的方法嗎?我只需要一個小時的轉換精度。 –

+0

不熟悉這個API,但我注意到了你的代碼。沒有必要像這樣明確地轉換這些值。 Java中的浮點數默認爲'double'。 '(double)2452555.13'與'2452555.13'完全相同。如果你想避免混淆'2452555.13d',也可以在數字後加上'd'。 – toniedzwiedz

回答

1

我不確定,但似乎一切都指向了浮點數的精度。您可以使用接受BigDecimalJulianDateStamp的重載構造函數。

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 

其通過this Julian Date Converter驗證。

如果輸入是在double的形式來使用

Double dob = (double)2452555.13; 
System.out.println(dob); 
BigDecimal julianDateDouble = new BigDecimal(dob.toString()); 
+0

非常感謝您的回答。現在值得到正確轉換。 –