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年を引いた年を取ります。

(これは、可能な限りJODAを使用する必要がある多くの理由の1つです。これは、非常に優れた設計で驚くべきAPIを備えていません。特に、組み込みのJava time APIを使用するよりも、さびたナイフで小指を外したいです。 。)

于 2013-01-03T19:37:35.117 に答える
3

Java Date のコンストラクターは、希望する年に 1900 を追加します。月のインデックスもゼロなので

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

なるべき

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

APIドキュメントをチェックしてください

于 2013-01-03T19:40:22.600 に答える
1

Dateドキュメントから:

パラメーター:

年-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 に答える