2012-09-13 87 views
3
我使用JodaTime首次

時,不明白什麼是錯的:喬達LocalDateTime IllegalFieldValueException轉換爲java.util.Date

LocalDateTime localDateTime = new LocalDateTime(1965, 4, 8, 15, 16, 17, 18); 
Date date = localDateTime.toDate(); 

當我運行此我得到:

org.joda.time.IllegalFieldValueException: Value -982 for millisOfSecond must be in the range [0,999] 

,但如果我這樣做(沒有millis)來,我沒有得到異常:

LocalDateTime localDateTime = new LocalDateTime(1965, 4, 8, 15, 16, 17); 
Date date = localDateTime.toDate(); 

而且我不明白的例外(即年份= 1975):

LocalDateTime localDateTime = new LocalDateTime(1975, 4, 8, 15, 16, 17, 18); 
Date date = localDateTime.toDate(); 

發生了什麼事?有關於轉換爲java.util.Date的限制嗎?

回答

1
LocalDateTime localDateTime = new LocalDateTime(1965, 4, 8, 15, 16, 17, 18); 
    Date date = localDateTime.toDateTime().toDate(); 
+0

+1謝謝,這個工程。如果你能解釋爲什麼這是必要的,我會接受它作爲答案。 – DaveRlz

+0

我認爲這是'JodaTime 2 +'的缺陷。我正在使用'JodaTime 1.6',並且我無法在'LocalDateTime'類中使用'toDate()'方法。 – Ilya

+0

是的,我發現錯誤。它在方法'LocalDateTime#fromDateFields' in line'(int)(date.getTime()%1000)' – Ilya

1

以下通常是正確的。但這次不行。

請務必使用喬達 .getMillis() - 它會給你毫秒從出現時間區間和允許無瑕疵(的Java API) Date()建設 - 這樣的: new Date(millis)

所以,總結:

LocalDateTime localDateTime = new LocalDateTime(1975, 4, 8, 15, 16, 17, 18); 
Date date = new Date(localDateTime.getLocalMillis()); 

這是實際工作的解決方案:

LocalDateTime ldt = new LocalDateTime(1975, 4, 8, 15, 16, 17, 18);   
DateTime dt = new DateTime(ldt.getYear(), ldt.getMonthOfYear(), ldt.getDayOfMonth(), ldt.getHourOfDay(), ldt.getMinuteOfHour(), ldt.getSecondOfMinute(), ldt.getMillisOfSecond()); 
Date d = new Date(dt.getMillis()); 

和1965年被時代之前......我不知道如何它影響日期和毫秒,但是,是的,只是說。

+0

我在localDateTime上看不到getLocalMillis()和getMillis()。 – DaveRlz

+0

對不起,我的錯誤是'LocalDate'的方法。試試'LocalDateTime ldt = new LocalDateTime(1975,4,8,15,16,17,18); DateTime dt = new DateTime(ldt);日期d =新日期(dt.getMillis());'並讓我知道如果沒關係 – alex

+0

謝謝,但不完全。沒有DateTime的構造函數需要LocalDateTime。我正在通過不打擾millis來解決我的問題,但很好理解JodaTime中的限制/限制。 – DaveRlz

相關問題