SimpleDateFormat子类在年中增加了1900个

时间:2012-03-17 15:07:09

标签: android date datepicker

我已创建了几个SimpleDateFormat的子类,以简化处理我在Android上与之交谈的Azure Feed。其中一个如下:

public class ISO8601TLDateFormat extends SimpleDateFormat {

    private static String mISO8601T = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";

    public ISO8601TLDateFormat() {
        super(mISO8601T);
    }

    public ISO8601TLDateFormat(Locale inLocale) {
        super(mISO8601T, inLocale);
    }
}

正如您所看到的,目的是制作或解释类似

的日期

2012-03-17T00:00:00.000 + 0100

这是Azure服务所期望的。但是,当我输入由Date构造的DatePicker个对象时,

mDate = new Date(mDatePicker.getYear(), mDatePicker.getMonth(), mDatePicker.getDayOfMonth());

ISO8601TLDateFormat的输出是

3912-03-17T00:00:00.000 + 0100

正如您所看到的,这一年比我更多,或者未来未来的任何人都需要。我已经仔细检查了Date对象到Azure Feed系统的整个过程,它报告的日期是2012年,这是我所期望的。为什么SimpleDateFormat会破坏?

1 个答案:

答案 0 :(得分:4)

问题是Date的构造函数没有得到你期望的结果。取自java documentation

public Date(int year,
            int month,
            int date)
Deprecated. As of JDK version 1.1, replaced by Calendar.set(year + 1900, month, date) or GregorianCalendar(year + 1900, month, date).
Allocates a Date object and initializes it so that it represents midnight, local time, at the beginning of the day specified by the year, month, and date arguments.
Parameters:
year - the year minus 1900.
month - the month between 0-11.
date - the day of the month between 1-31.

您需要记住,您构建了一个日期,0, 0, 1是1900年1月1日。