我已经创建了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服务所期望的。然而,当我输入由aDate构造的对象时,因此:
mDate = new Date(mDatePicker.getYear(), mDatePicker.getMonth(), mDatePicker.getDayOfMonth());

DatePicker的输出是
3912-03-17t00:00:00.000+0100
如你所见,这一年比我或其他任何不来自未来的人所需要的都多1900年。我已经仔细检查了ISO8601TLDateFormat对象在其访问azure feed系统的整个过程,它报告它的日期是2012年,这是我所期望的。为什么Date断开?

最佳答案

问题是Date的构造函数没有收到您期望的结果。取自Javadocumentation

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日。

关于android - SimpleDateFormat子类在年中增加了1900个,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9751050/

10-09 03:32