【发布时间】:2018-12-11 20:17:29
【问题描述】:
Java.Time.Year 的 Java 8 文档页面指出,支持的最小和最大年份分别为 -999,999,999 和 999,999,999。
字段摘要
static intMAX_VALUE支持的最大年份,'+999,999,999'。
static intMIN_VALUE支持的最小年份,'-999,999,999'。
但是,存储年份值的原始类型变量是 int,它应该能够存储 -2,147,483,648 和 2,147,483,647 之间的值。
/**
* The year being represented.
*/
private final int year;
为什么会有这些任意限制?
【问题讨论】:
-
因为
java.time主要基于 ISO,并且 ISO 年份表示它“必须有一个商定的额外年份位数超过四-最少位数”,至少根据Wikipedia。解析为 9 位数字。 -
999_999_999 的使用不是任意的,因为它包括从 -999_999_999 到 +999_999_999 的每个可能的年份,因此每个可能的年份最多 9 位都是可用的。使用 INT_MAX 时,并非所有最多 10 位数的可能年份都可用,这些年份中只有 21% 可用。
-
@Andreas 最少四位数字不是 9 位,而是四位(-9999 到 +9999)。
-
@MenoHochschild "extra year digits" 当年份存储在
int中时,最多解析为 9 位数字,因为int无法存储 10 的完整范围数字。 -
@Andreas 感谢您的澄清。对我来说是一个误解(我不是以英语为母语的人)。