You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询Java中SimpleDateFormat解析yyyy-MM-dd格式的有效日期范围

Java中SimpleDateFormat解析yyyy-MM-dd的日期范围限制

为什么最大有效日期是4637-11-25而非9999-12-31?

SimpleDateFormat本身没有独立的日期范围限制,它完全依赖底层默认的GregorianCalendar处理日期。而GregorianCalendar用long类型存储时间戳,long的最大值是9223372036854775807(2的63次方减1),这个值对应的具体日期就是你测试到的4637-11-25——该日期会因所在时区略有差异,比如UTC时区下对应4638-01-01,东八区则会提前到4637年11月。

9999-12-31对应的时间戳已经超过long的容纳上限,所以SimpleDateFormat解析时会直接报错。

关于最小有效日期

GregorianCalendar能表示的最小时间戳是-9223372036854775808,对应公元前292278994年左右的日期,但解析这类极早日期可能因历法转换(儒略历转格里高利历)出现异常;像1900-01-01这类近代日期则可以正常解析。

要支持9999-12-31怎么办?

如果需要处理超大范围日期,别用SimpleDateFormat了,直接用Java 8及以后的java.time包,比如LocalDate和DateTimeFormatter。这些类不依赖long时间戳,支持的日期范围从公元前999999999年到公元999999999年,轻松覆盖9999-12-31的需求。示例代码:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate maxDate = LocalDate.parse("9999-12-31", formatter);

内容的提问来源于stack exchange,提问作者Trowa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 20:51:11