繁体   English   中英

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

Joda LocalDateTime IllegalFieldValueException when converting to java.util.Date

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我第一次使用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 个回复

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

始终在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年在Epoch之前...我不知道它如何影响Date和millis,但是,是的,只是说。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题
 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM