我已经创建了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服务所期望的。然而,当我输入由a
Date
构造的对象时,因此: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/