当前位置: 首页 > 面试题库 >

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

邹山
2023-03-14
问题内容

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);
    ....
  • 为什么是 1900年

问题答案:

基本上,原始的java.util.Date设计器从C复制了很多东西。您所看到的是那的结果-
请参见tmstruct。因此,您可能应该问为什么将其设计为使用1900年。我怀疑基本答案是“因为我们在设计时并不擅长API设计tm”。我认为关于日期和时间,我们在API设计上
仍然 不是很擅长,因为有很多不同的用例。

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



 类似资料:
  • Year函数返回一个表示指定日期年份的整数。 语法 (Syntax) Year(date) 例子 (Example) 添加按钮并添加以下功能。 Private Sub Constant_demo_Click() msgbox(Year("2013-06-30")) End sub 执行上述功能时,会产生以下输出。 2013

  • 问题内容: 我正在尝试做一些非常简单的事情,但是开始意识到Java中的日期有点雷区。我想要的是让三个整数(一年,一个月和一个日期)通过的组创建一些对象,对其进行一些简单的测试(沿着日期B之前的日期A和1990年1月1日之后的行A)将它们传递给对象,然后通过JDBC将其传递给数据库。 一切都非常简单,并且可以使用构造函数正常运行。当然,该构造函数已弃用,我想避免在正在编写的新代码中使用已弃用的调用。

  • 光年(Light Year Admin)后台管理系统模板是一个基于Bootstrap v3.3.7的纯HTML模板。 作为后端开发人员,自己在做一些简单系统时,经常为了后台的模板烦恼,国内的少,也不太喜欢tab形式的;国外的又太复杂;vue什么框架的又不会用,因而想自己整理出来一个简单点的通用后台模板,结合自己的使用和国外模板的配色、细节处理,这就有了光年后台模板。 简洁而清新的后台模板,功能虽少

  • 笔下光年博客(Light Year Blog)是基于 Bootstrap v4.3.1 的小清新风格博客模板,只有三个页面,首页,详细页和 About 页面,样式和js都不多,比较简单。 左右分栏布局,自己搭配左侧背景。 基于 Bootstrap v4.3.1 编写,响应式布局(台式机、平板电脑、移动设备),支持主流浏览器(Chrome、Firefox、Safari、IE11、Edge)。 界面设

  • Bootstrap-Year-Calendar 是用于 Bootstrap 的,完全可定制的年历。

  • 问题内容: 我有一个名为“ FechasFirmaHorometros”的视图,定义为 我有一个名为[RespuestaPreguntaHorometrosFecha]的函数定义为 在调试使用该函数的另一个存储过程时,我一直在碰到上述函数时收到此消息 但是我可以自由地做类似的事情 为什么会发生这种情况,我该如何解决或解决呢? 问题答案: 由于某种原因,我认为这是某种类型的字符串列。您应该解决该问题