我已经创建了几个SimpleDateFormat的子类来简化处理我在
Android上谈论的Azure提要.其中一个如下:
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服务所期望的.但是,当我输入从DatePicker构造的Date对象时:
mDate = new Date(mDatePicker.getYear(),mDatePicker.getMonth(),mDatePicker.getDayOfMonth());
ISO8601TLDateFormat的输出是
3912-03-17T00:00:00.000 0100
正如你所看到的,这一年比我更多,或者不是未来的任何人都需要.我已经仔细检查了Date对象到Azure Feed系统的整个过程,它报告的日期是2012年,这是我所期望的.为什么SimpleDateFormat会破坏?
解决方法
问题是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,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,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,1,是1900年1月1日.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。