3

我第一次使用 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 是否有一些限制?

4

2 回答 2

1

以下通常是正确的。但这次不是。

始终.getMillis()在 Joda 中使用 - 它会给你从 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 年在 Epoch 之前......我不知道它如何影响 Date 和 Millis,但是,是的,只是说。

于 2012-09-13T08:51:38.290 回答
1
  LocalDateTime localDateTime = new LocalDateTime(1965, 4, 8, 15, 16, 17, 18);
  Date date = localDateTime.toDateTime().toDate();
于 2012-09-13T11:39:24.613 回答