0

代码:

import java.sql.Timestamp;
Timestamp startTimestamp = new Timestamp(2012, 1, 1, 0, 0, 0, 0);
System.out.println("startTimestamp = " + startTimestamp);
System.out.println("startTimestamp.getYear() = " + startTimestamp.getYear());

输出:

startTimestamp = 3912-02-01 00:00:00.0
startTimestamp.getYear() = 2012

这是一个错误还是我做错了什么?

4

2 回答 2

1

javadoc说:

参数: year - 年份减去 1900

所以,2012+1900=3912。

于 2012-10-02T21:21:31.323 回答
0

请注意,这new Timestamp(2012, 1, 1, 0, 0, 0, 0);已被弃用,我认为这是您问题的根源!

改为使用Timestamp startTimestamp = new Timestamp(System.currentTimeMillis());

另外,请注意,这startTimestamp.getYear()也已弃用!

已弃用。从 JDK 1.1 版开始,由 Calendar.get(Calendar.YEAR) 取代。

返回此 Date 对象表示的月份中的哪一天。返回的值介于 1 和 31 之间,表示包含此 Date 对象所表示的时间点或以该时间点开始的月份的日期,如本地时区所解释的那样。

考虑这个例子(基于您的原始代码):

public static void main(String[] args)
{
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.DAY_OF_YEAR, 1);
    cal.set(Calendar.MONTH, 1);
    cal.set(Calendar.HOUR, 0);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);
    Timestamp startTimestamp = new Timestamp(cal.getTimeInMillis());
    System.out.println("startTimestamp = " + startTimestamp);
    Calendar cal2 = Calendar.getInstance();
    cal2.setTimeInMillis(startTimestamp.getTime());
    System.out.println("Year = " + cal2.get(Calendar.YEAR));
}

它将产生输出:

startTimestamp = 2012-01-01 12:00:00.0
Year = 2012
于 2012-10-02T21:41:00.050 回答