Java.util.date年份大于三千

时间:2017-06-16 12:32:33

标签: json postgresql date java.util.date

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

1 个答案:

答案 0 :(得分:2)

我认为这个例子可以帮助您了解您的真正问题(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之后显示日期。