Java.util.date年大三千

Java.util.date year bigger than three thousand

我有一个将日期插入数据库的应用程序。当我在 Data Source Explorer 中使用 Eclipse neon 打开条目时,我发现日期中的年份值为 "3916"(示例:3916-10-05)。知道变量是 java.util.date 类型并且数据库中的列是 DATE.

类型

我认为这个例子将帮助您了解您真正的问题是什么 (try it):

import java.util.Date;
import java.io.*;

class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        Date date = new Date(1475625600000L); //2016-10-05
        int year = date.getYear();
        System.out.println("Year from epoch: " + date.getYear());
        date.setYear(2016);
        System.out.println("Year from setYear() " + date.getYear());
        System.out.println("Full date: " + date.toString());
    }
}

这将打印

Year from epoch: 116
Year from setYear() 2016
Full date: Thu Oct 05 00:00:00 GMT 3916

java.util.Date 在处理日期中的年份时有点奇怪。当您设置年份时它使用 1900 的偏移量,当您从日期中获取年份时减去它。

来自documentation

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).

如果您尝试将年份设置为其 4 位数字形式,您最终会得到 3900 之后的日期。