构造日期时出错

时间:2011-12-01 12:45:23

标签: java android date calendar

我有这样的代码:

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

日,月和年不能从其他线程更改。

4 个答案:

答案 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);