2017-05-07 7 views
2

私は週の最初の日を取得したいが、私は奇妙なバグがあります。 私はこのコードを使用する場合:AndroidのカレンダーgetFirstDayOfWeekのバグ

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())); 

私のログ表示、正しい日付を:私はちょうどこのようgetTime()メソッドを使用している場合D/Activity: Date: lundi 2 janvier 2017

しかし:

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 26 décembre 2016

私の電話はフランス語を使用していますので、私の週は月曜日から始まります。

誰かがなぜ知っていますか?

答えて

2

JavaのカレンダーAPIは、フィールドの更新に関する動作に悪影響を及ぼします。問題は、いくつかの内部が適切に調整されない、すなわち実際にそうでなければ、いくつかの値を更新しないので、複数のset()呼び出しが予期しない結果につながる可能性があるということです。 getTime()に電話をしたとき。

this postで詳しく読むことができます。

したがって、この問題の修正は実際にはgetTime()またはgetTimeInMillis()を間に呼び出します。

+0

完璧、あなたの詳細な答えをありがとう:) – Louis