我已创建了几个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
会破坏?
答案 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日。