转换为java.util.Date时,Joda LocalDateTime IllegalFieldValueException

时间:2012-09-13 08:47:25

标签: java jodatime

我第一次使用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有什么限制吗?

2 个答案:

答案 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();