2012-09-13 8 views
3
내가 처음 JodaTime을 사용하고

을로 변환이 무엇이 잘못되었는지를 이해하지 않는 경우 :이 프로그램을 실행할 때Joda 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] 

하지만이 (더 밀리 초)을 설정하지 않으면, 나는 예외하지 않습니다

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

을 그리고 난 예외를 얻을하지 않습니다 with (즉, 연도 = 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

예, 버그를 발견했습니다. '(int) (date.getTime() % 1000)''LocalDateTime # fromDateFields' 메서드에 있습니다. – Ilya

1

다음은 일반적으로 적합합니다. 하지만 이번엔 아니야.

항상 Joda에서 .getMillis()를 사용 - 같은 -이 Date() 건설 완벽한 (자바 API)를 사용하면 신기원에서 시간 범위를 밀리 초주고 수 : new Date(millis)합니다.

그래서, 합산 :

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 신기원 전에 ... 난 방법을 몰라된다

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

이 실제로 작동하는 솔루션입니다 그것은 Date와 Millis에 영향을 미치지 만, 그렇습니다.

+0

localDateTime에 getLocalMillis() 또는 getMillis()가 표시되지 않습니다. – DaveRlz

+0

죄송합니다. 저의 실수는 'LocalDate'의 방법입니다. 'LocalDateTime ldt = new LocalDateTime (1975, 4, 8, 15, 16, 17, 18)을 시도해보십시오. DateTime dt = 새 DateTime (ldt); 날짜 d = 새 날짜 (dt.getMillis()); '그리고 괜찮은지 알려주십시오 – alex

+0

고마워요. DateTime에는 LocalDateTime을 사용하는 생성자가 없습니다. 나는 millis로 귀찮게하지 않음으로써 내 문제를 해결하고 있지만 JodaTime의 제약 사항/제한 사항을 이해하는 것이 좋습니다. – DaveRlz