Java JodaTime整数最小/最大值解析

Java JodaTime整数最小/最大值解析,java,jodatime,Java,Jodatime,有人能给我一些关于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-16T1

有人能给我一些关于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基于JodaTime的JSR310有一个DateTime.MIN_值和MAX_值,正如@Magnilex指出的,不支持超出此范围的行为

LocalDateTime.of

投掷

DateTimeException-如果任何字段的值超出范围,或者如果月份的日期对于月份年份无效

如果可以,我建议您迁移到JSR-310。它内置于Java8中,早期版本有一个后端口


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

您能详细说明一下Java 8 API如何处理这些情况吗?它是抛出异常还是以其他方式定义行为?或者它根本没有限制吗?@Magnilex超出范围的行为是未定义的,这意味着它可能在Java更新之间有所不同,甚至可能在区域设置之间有所不同。我想不是,但不管发生什么,你都不应该依赖它,Joda DateTime的最小/最大值是多少?如何创建一个最小/最大对象?@ HeAPHAGH JordaMe不是关于这一点的具体,但必须有一个明智的一年,你认为低有效。e、 g.您是否需要当前日期之前的日期,1970、1900、0000或-9999,或-99999999@PeterLawrey它在LocalDateTime API中真的没有定义吗?据我所知,如果值太大/太小,它会抛出一个异常。例如,LocalDateTime.ofEpochSecondLong.MIN_值0,ZoneOffset.UTC为年份有效值-99999999-99999999:-292277022657抛出无效值。换句话说,根据JavaDoc,OP代码的Java8等价代码在第一行失败。