关于极值Instant(如Instant.MAX)的DateTimeFormatter格式化问题
关于极值Instant(如Instant.MAX)的DateTimeFormatter格式化问题
我碰到一个头疼的问题:明明是合法的Instant实例,用DateTimeFormatter格式化却失败了,特别是像Instant.MAX这种超出LocalDateTime.MIN和LocalDateTime.MAX范围的极值时间。比如执行这段代码就会报错:
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneOffset.UTC).format(Instant.MAX)
想请教下,对于这类超出LocalDateTime极值范围的Instant,正确的格式化方式是什么?难道必须手动处理吗?
编辑补充(给后续读者)
经过验证,答案是肯定的——这类超出范围的Instant确实需要手动处理。原因在于DateTimeFormatter在格式化Instant时,会先将其转换为LocalDateTime实例,但LocalDateTime有固定的年份范围限制(大概是公元前999999999年到公元999999999年),一旦Instant对应的时间超出这个范围,转换步骤就会抛出异常,所以标准的DateTimeFormatter无法直接处理这类情况,必须自己编写逻辑手动处理超出范围的年份等部分。
备注:内容来源于stack exchange,提问作者Brethlosze
相关产品推荐
相关产品推荐

