0

在 Java 7 上(Java 6 未测试):

import java.util.Date;

public class Main {

    public static void main(String[] args) {
        Date test=new Date(2012, 12, 12);
        System.out.println("test=" + test.toString());
    }
}

给我

test=Sun Jan 12 00:00:00 CET 3913

注意年份:3913,与我通过的年份(2012)不同。

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

(是的,我知道我使用的 Date 构造函数已被弃用。)

4

4 回答 4

7

Date构造函数将年份减去 1900,如 doc 中所述

(这是您应该尽可能使用 JODA 的众多原因之一,它具有明显更好的设计且不那么令人惊讶的 API。特别是,我宁愿用生锈的刀去除我的小指,也不愿使用内置的 Java 时间 API .)

于 2013-01-03T19:37:35.117 回答
3

constructor for Java Date takes the year you would like and adds 1900 to it. month is zero indexed too so

Date test=new Date(2012, 12, 12);

should become

Date test=new Date(2012-1900, 11, 12);

check out the API doc

于 2013-01-03T19:40:22.600 回答
1

Date文档中:

参数:

year - 减去 1900 的年份。

月 - 0-11 之间的月份。

显然,1900 + 2012 = 3912。通过超过月份值的限制,您实际上已经超过了指定的年份,因此是该3913值。

于 2013-01-03T19:37:50.653 回答
0

的第一个参数Date()定义如下:

year - the year minus 1900; must be 0 to 8099. (Note that 8099 is 9999 minus 1900.)

这解释了差异。

于 2013-01-03T19:37:50.283 回答