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によると:

パラメータ: 年-年から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 に答える