2017-05-07 64 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