正如大多数人现在痛苦地意识到的那样,用于处理日历日期的Java API(特别是类java.util.Date和java.util.Calendar)是一个糟糕的混乱.
脱离我的头顶:
现在我的问题是:
这些类是如何进入Java SDK的?大多数这些问题看起来相当明显(特别是Date是可变的)并且应该很容易避免.那怎么回事?时间压力?或者回想起来的问题是否明显?
我意识到这不是一个严格的编程问题,但我发现理解API设计如何出错是很有趣的.毕竟,错误总是一个很好的学习机会(我很好奇).
我在将字符串日期解析为Date对象时遇到了一些麻烦.我用a DateFormat来解析字符串,当我打印日期的值时,它给了我期望的东西.
但是,当我尝试得到一天,一个月或一年时,它给了我错误的价值.例如,这一年是2011年,但是当我这样做时,.getYear()它给了我111.我不知道为什么会这样.以下是相关的代码段:
Date dateFrom = null;
String gDFString = g.getDateFrom();
System.out.println(gDFString);
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
try {
dateFrom = df.parse("04/12/2011");
System.out.println(dateFrom);
System.out.println(dateFrom.getYear());
} catch (ParseException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
当我打印出来时dateFrom,我得到了Sun Dec 04 00:00:00 GMT 2011,这就是你所期望的.但打印.getYear()回报111.
我需要能够获得时间序列图的日期,月份和年份.
我正在尝试从日期获取年份,并且Calendar.get(Calendar.YEAR)我获得3917年而不是2017年?但是,当我尝试检查输出时,date.getYear()它将返回正确的年份。
Date date = new Date(year, month, day);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
Log.d(TAG, "onClick: year "+date.getYear());
Log.d(TAG, "onClick: year "+calendar.get(Calendar.YEAR));
Run Code Online (Sandbox Code Playgroud)
输出:
onClick:2017年
onClick:3917年
日期类显示正确的年份,但日历显示错误的年份