Java 构造日期时出错
我有这样的代码:Java 构造日期时出错,java,android,date,calendar,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.g
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
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
为什么不是1985-12-11?它在某些日期或调试模式下正常工作。但为什么它不总是起作用呢
在处理日期和通过SimpleDataFormat从字符串解析日期时,我也有类似的问题
编辑:执行此代码的其他示例:
day=11, month=11, year=1985
Date is parsed to 1985-12-10
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
无法从其他线程更改日期、月份和年份。日历中的月份以零为基础。请看这里: 我建议你读一下:
如果可以的话,它实际上更容易使用,更不容易出现bug——它有一个更整洁、更安全的API。月是0-11,天从1开始 月 一天 编辑: 输出:
12/11/1985
试试这个:
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());
谢谢你的帮助。这似乎是一些安卓设备的问题。它出现在5台设备中的3台。我通过指定时间来修正它
c.set(Calendar.HOUR_OF_DAY, 12);
c.set(Calendar.MINUTE, 30);
您能显示您的年、月和日变量的初始化位置吗?它们已在上面初始化。没关系。它们是int值,它们的值是loggeddon告诉我这不重要。当然,当您获得意外的输出时,它很重要。
日
、月
和年
是否被其他线程更改?你说它对某些约会有效?!哪些日期有效,哪些日期无效?也许到时候我们就能知道你的问题属于哪里了。@darja我很困惑。有什么问题吗?如前所述,月份以0为基础!投票否决一个答案并不好,即使它不完整。我没有看到月日issue@Eran我没有投反对票,但这不是对这里提出的问题的回答。如果你仔细阅读这个问题,那么它既不是一个不完整的答案,也不是一个完整的答案。OP显然对这个月一点也不恼火。OP只是对每月的哪一天感到困惑。但是+1提到乔达时间…@darja因为你做得不对。像瓦纳西那样做,你就得到了。我不需要格式化。我需要正确的价值观。这段代码也不起作用。@darja如果上面的代码不起作用,请提供更多信息。@darja我希望您在这段代码上也有同样的问题,因为它与您的代码基本相同。请参阅我对您可以提供的其他信息的评论。当您显式使用new GregorianCalendar()
而不是Calendar.getInstance()
时,会有什么不同吗?您确定这不是时区问题吗?可能是夏令时问题,而不是时区问题。它解释了一些事情,但不是为什么12月25日是init正确,但12月3日不是。