2017-05-07 47 views
2

我想获得一周的第一天,但​​我有一个奇怪的错误。 如果我用这个代码:Android日历getFirstDayOfWeek错误

Calendar cal = Calendar.getInstance(); 
cal.set(2017, 0, 1); 

cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek()); 
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL, Locale.getDefault()); 
Log.d(TAG, "Date: " + dateFormat.format(cal.getTime())); 

我的日志显示错误的日期:D/Activity: Date: lundi 2 janvier 2017

但是,如果我用getTime()方法就像这样:

Calendar cal = Calendar.getInstance(); 
cal.set(2017, 0, 1); 
cal.getTime(); // Here 

cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek()); 
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL, Locale.getDefault()); 
Log.d(TAG, "Date: " + dateFormat.format(cal.getTime())); 

我的日志显示正确的日期:D/Activity: Date: lundi 26 décembre 2016

我的手机使用法语,所以我的周一周一开始。

有人知道为什么吗?

回答

2

Java的Calendar API在其更新字段的行为方面声名狼借。问题在于多个调用可能导致一些意想不到的结果,因为一些内部调整不正确,即它不会更新某些值直到它真的必须调整为止。当你拨打getTime()

你可以在this post了解更多。

因此,这个问题的修复确实是在getTime()getTimeInMillis()之间。

+0

完美,谢谢你的详细解答:) – Louis