为什么Java的Date.getYear()返回111而不是2011?

2022-09-01 00:59:24

我在将字符串日期解析为对象时遇到了一些麻烦。我使用a来解析字符串,当我打印日期的值时,它给了我我期望的东西。DateDateFormat

但是当我尝试获取日,月或年时,它会给我错误的值。例如,年份是2011年,但当我这样做时,它给了我111。我不知道为什么会发生这种情况。以下是相关的代码段:.getYear()

    Date dateFrom = null;

    String gDFString = g.getDateFrom();

    System.out.println(gDFString);

    DateFormat df = new SimpleDateFormat("dd/MM/yyyy");

    try {
        dateFrom = df.parse("04/12/2011");

        System.out.println(dateFrom);

        System.out.println(dateFrom.getYear());
    } catch (ParseException e) {
        e.printStackTrace();
    }

当我打印出来时,我得到,这是你所期望的。但是打印返回 .dateFromSun Dec 04 00:00:00 GMT 2011.getYear()111

我需要能够获得时间序列图的日期,月份和年份。


答案 1

这些方法已被弃用。请改用日历类。


import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public final class DateParseDemo {
    public static void main(String[] args){
         final DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
         final Calendar c = Calendar.getInstance();
         try {
             c.setTime(df.parse("04/12/2011"));
             System.out.println("Year = " + c.get(Calendar.YEAR));
             System.out.println("Month = " + (c.get(Calendar.MONTH)));
             System.out.println("Day = " + c.get(Calendar.DAY_OF_MONTH));
         } 
         catch (ParseException e) {
             e.printStackTrace();
         }
    }
}

输出

Year = 2011
Month = 3
Day = 12

至于月份字段,这是从 0 开始的。这意味着 1 月 = 0 和 12 月 = 11。正如javadoc所说,

用于获取和设置的字段编号,指示月份。这是特定于日历的值。公历和儒略历中一年的第一个月是 ;最后一个取决于一年中的月数。JANUARY0


答案 2

Javadoc救援:

荒废的。从 JDK 版本 1.1 开始,替换为 Calendar.get(Calendar.YEAR) - 1900。

返回一个值,该值是从包含此 Date 对象所表示的时间时刻或以此日期所表示的瞬间开头的年份中减去 1900 的结果,如在本地时区中所解释的那样。

不应使用已弃用的方法。不推荐使用的方法不应再使用。但是无论你使用什么方法,阅读它的javadoc以了解它的作用。