我第一次使用JodaTime并且不明白这有什么问题:
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();
我没有得到例外(即年= 1975年):
LocalDateTime localDateTime = new LocalDateTime(1975, 4, 8, 15, 16, 17, 18);
Date date = localDateTime.toDate();
发生了什么事?转换为java.util.Date有什么限制吗?
答案 0 :(得分:1)
以下通常是正确的。但不是这次。
始终在Joda中使用.getMillis()
- 它将为您提供Epoch的毫秒时间范围,并允许完美无缺的(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年在大纪元之前...我不知道它如何影响日期和毫米,但是,是的,只是说。
答案 1 :(得分:1)
LocalDateTime localDateTime = new LocalDateTime(1965, 4, 8, 15, 16, 17, 18);
Date date = localDateTime.toDateTime().toDate();