我有一个将日期插入数据库的应用程序。当我在Data Source Explorer中使用Eclipse neon打开条目时,我发现日期中的年份具有值"3916"
(例如:3916-10-05)。知道变量的类型为java.util.date,并且db中的列的类型为DATE。
答案 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的偏移量,当你从日期获得数年时减去它。
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之后显示日期。