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

Ben*_*der 43 java calendar date

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

但是,当我尝试得到一天,一个月或一年时,它给了我错误的价值.例如,这一年是2011年,但是当我这样做时,.getYear()它给了我111.我不知道为什么会这样.以下是相关的代码段:

    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();
    }
Run Code Online (Sandbox Code Playgroud)

当我打印出来时dateFrom,我得到了Sun Dec 04 00:00:00 GMT 2011,这就是你所期望的.但打印.getYear()回报111.

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

mre*_*mre 44

这些方法已被弃用.而是使用Calendar类.


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();
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

Year = 2011
Month = 3
Day = 12
Run Code Online (Sandbox Code Playgroud)

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

get和set的字段编号表示月份.这是特定于日历的值.格列高利历和朱利安历的一年中的第一个月JANUARY0; 最后一个取决于一年中的月数.

  • 它只是我或Android日期/时间API就是这样....(呕吐)......难看? (2认同)

JB *_*zet 10

Javadoc救援:

已过时.从JDK 1.1版开始,由Calendar.get(Calendar.YEAR) - 1900取代.

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

您不应该使用弃用的方法.不推荐使用的方法是不应再使用的方法.但无论您使用哪种方法,请阅读其javadoc以了解它的作用.


小智 9

总统邪恶钉了它,Date.getYear()返回一个值,该值是从包含的年份减去1900的结果.你不应该使用它.

但快速修复问题中的代码是:

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);

    // Add 1900 to dateFrom.getYear() 

    System.out.println(dateFrom.getYear()+1900);
} catch (ParseException e) {
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)


epo*_*ine 3

这只是一个猜测,但 111 可能是自 1900 年以来的年数。查看文档/做一些测试来验证这一点(我目前无法检查)