JodaTime Integer Min/Max 值解析

JodaTime Integer Min/Max Value parsing

谁能给我一些关于 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]

Java 8 的 JSR310(基于 JodaTime)有一个 DateTime.MIN_VALUE 和 MAX_VALUE 并且不支持超出此范围的行为(正如@Magnilex 指出的那样)。

LocalDateTime.of( ... )

throws

DateTimeException - if the value of any field is out of range, or if the day-of-month is invalid for the month-year

如果可以的话,我建议您迁移到 JSR-310。它内置于 Java 8 并且有一个早期版本的反向移植。

https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html

上面示例的问题是年份 -292275054-01-01 的开始超出了范围,因此它无法存储此值,因此它会解析日期的其余部分。理论上它可以通过特殊处理来做到这一点,但由于这是恐龙生活之前的日期,而且还不到 MIN_VALUE,因此您不应期望它是有效的。