为什么java.util.Date将Year表示为“ year-1900”?

java.util.Date

 * In all methods of class <code>Date</code> that accept or return

* year, month, date, hours, minutes, and seconds values, the

* following representations are used:

* <ul>

* <li>A year <i>y</i> is represented by the integer

* <i>y</i><code>-1900</code>.

当然,在Java

1.1中,getYear()不赞成使用方法和类似方法,而推荐使用java.util.Calendar,但仍然具有以下怪异的弃用说明:

 int    getYear() 

Deprecated. As of JDK version 1.1, replaced by Calendar.get(Calendar.YEAR) - 1900.

setYear(int year)

Deprecated. As of JDK version 1.1, replaced by Calendar.set(Calendar.YEAR, year + 1900).

当然,Month是0基于-的,但我们都知道(尽管您认为他们已经从中消除了这个问题Calendar-他们没有):

 * <li>A month is represented by an integer from 0 to 11; 0 is January,

* 1 is February, and so forth; thus 11 is December.

  • 最初的创建者java.util.Date希望通过从中减去1900来存储“年”的数据而获得什么呢?特别是如果它基本上存储了很长时间。

因此:

private transient long fastTime;

@Deprecated

public int getYear() {

return normalize().getYear() - 1900;

}

@Deprecated

public void setYear(int year) {

getCalendarDate().setNormalizedYear(year + 1900);

}

private final BaseCalendar.Date getCalendarDate() {

if (cdate == null) {

BaseCalendar cal = getCalendarSystem(fastTime);

....

  • 为什么是 ?

回答:

基本上,原始的java.util.Date设计器从C复制了很多东西。您所看到的是那的结果-

请参见tmstruct。因此,您可能应该问为什么将其设计为使用1900年。我怀疑基本答案是“因为我们在设计时并不擅长API设计tm”。我认为关于日期和时间,我们在API设计上

仍然 不是很擅长,因为有很多不同的用例。

不过,这只是API,而不是其中的存储格式java.util.Date。别烦,请注意。

以上是 为什么java.util.Date将Year表示为“ year-1900”? 的全部内容, 来源链接: utcz.com/qa/421762.html

回到顶部