我有这样的代码:
Log.d(TAG, "day=%d, month=%d, year=%s", day, month, year);
Calendar c = Calendar.getInstance();
c.clear();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month);
c.set(Calendar.DAY_OF_MONTH, day);
Log.i(TAG, "Date is parsed to %tF", c.getTime(), c.get(Calendar.DAY_OF_MONTH));
这是执行时得到的日志:
day=11, month=11, year=1985
Date is parsed to 1985-12-10
为什么不在1985-12-11?它适用于某些日期或调试模式。但为什么它并不总是有效?
使用Date和从String通过SimpleDateFormat
解析日期时,我也遇到了类似的问题编辑:此代码执行的其他示例:
day=1, month=0, year=2012
Date is parsed to 2012-01-01
day=25, month=11, year=2011
Date is parsed to 2011-12-25
day=4, month=10, year=1979
Date is parsed to 1979-11-03
day=3, month=11, year=1984
Date is parsed to 1984-12-02
日,月和年不能从其他线程更改。
答案 0 :(得分:1)
日历中的月份为零。见这里:http://docs.oracle.com/javase/6/docs/api/java/util/Calendar.html#MONTH
我建议你阅读:http://mindprod.com/jgloss/gregoriancalendar.html
如果可以的话,使用joda-time实际上更容易,更容易出错 - 它有一个更整洁,更安全的API。
答案 1 :(得分:1)
月份为0-11,白天从1开始。
月
http://docs.oracle.com/javase/6/docs/api/java/util/Calendar.html#MONTH
天
http://docs.oracle.com/javase/6/docs/api/java/util/Calendar.html#DAY_OF_MONTH
编辑:
Calendar c = Calendar.getInstance();
c.clear();
c.set(Calendar.YEAR, 1985);
c.set(Calendar.MONTH, 11);
c.set(Calendar.DAY_OF_MONTH, 11);
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
String strdate = sdf.format(c.getTime());
System.out.println(strdate);
输出:
12/11/1985
答案 2 :(得分:0)
试试这个:
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month);
c.set(Calendar.DAY_OF_MONTH, day);
SimpleDateFormat simpleDateFormat =
new SimpleDateFormat("MM-dd-yyyy");
Log.v("the date is:", simepleDateFormat.format(c.getTime());
答案 3 :(得分:0)
感谢您的帮助。这似乎是一些Android设备问题。它出现在5个设备中的3个。我已经通过指定时间来修复它。
c.set(Calendar.HOUR_OF_DAY, 12);
c.set(Calendar.MINUTE, 30);