有人能给我一些有关JodaTime解析行为的信息吗?
String minValueString = new DateTime(Long.MIN_VALUE).toString();
System.out.println(minValueString);
DateTime minDateTime = DateTime.parse(minValueString);
System.out.println(minDateTime.toString());
打印此内容,
-292275055-05-16T17:40:32.192+00:53:28
但是为解析部分
抛出此异常org.joda.time.IllegalFieldValueException: Cannot parse "-292275055-05-16T17:40:32.192+00:53:28": Value -292275055 for year must be in the range [-292275054,292278993]
答案 0 :(得分:4)
Java 8的JSR310(基于JodaTime)具有DateTime.MIN_VALUE和MAX_VALUE,并且不支持此范围之外的行为(如@Magnilex指出的那样)。
LocalDateTime.of(...)
<强>引发强>
DateTimeException - 如果任何字段的值超出范围,或者月中的日期无效
如果可以的话,我建议您迁移到JSR-310。它内置于Java 8中,并且有早期版本的backport。
https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html
上面示例的问题是,年份-292275054-01-01
的开头位于范围之外,因此无法存储此值,因此它会解析剩余的日期。它可以在理论上通过特殊处理来做到这一点但是因为这是恐龙生存之前的日期并且小于MIN_VALUE,所以你不应该期望它有效。