2014-01-30 68 views
1

我正在Android上創建自己的日曆UI實現。爲什麼Android Calendar.set方法在第一次修改嘗試時出錯結果?

this.currentCalendar = Calendar.getInstance(Locale.US); 

下面是的onClick監聽器實現改變currentCalendar個月:它的一個功能是通過簡單地增加或1

默認日曆值降低日曆的月份值改變當前查看的月曆使用初始化值。

@Override 
public void onClick(View v) { 
    int month = this.currentCalendar.get(Calendar.MONTH); 
    int year = this.currentCalendar.get(Calendar.YEAR); 
    SimpleDateFormat sdf = new SimpleDateFormat("MMM yyyy", Locale.US);  
    switch(v.getId()) { 
     case R.id.calendarNextMonthButton: // Next Button Clicked 
      month++; 
      break; 
     case R.id.calendarPrevMonthButton: // Prev Button Clicked 
      month--; 
      break; 
    } 
    this.currentCalendar.set(Calendar.MONTH, month); 
    Log.d("month", String.valueOf(this.currentCalendar.get(Calendar.MONTH))); 
    this.monthYearText = (TextView) this.v.findViewById(R.id.calendarMonthYearText); 
    this.monthYearText.setText(sdf.format(this.currentCalendar.getTime())); 
} 

初始化完成後,日曆顯示正確currentCalendar個月和年值,例如

this.currentCalendar.set(Calendar.MONTH, month); // debugger says month is 1 

,但是,當我試圖顯示月:月= 0(1月),年= 2014 當第一次我點擊下一步按鈕,month值增加1currentCalendar個月值是使用設置值爲currentCalendar,調試器表示月份值爲2(3月)而不是1(2月)。這隻在第一次嘗試點擊下一步按鈕時發生。下次點擊「下一頁」和「上一頁」按鈕時,日曆月份會完全改變。

代碼有問題嗎?

PS:我使用java.util.Calendar爲currentCalendar

回答

1

什麼是?我假設它是今天(第29),因爲你現在要求並使用getInstance()來得到Calendar ......這意味着這是正確的;它會延長到3月份,因爲2月只有28天。

Javadoc for Calendar

日曆具有解釋日曆字段,寬鬆,非寬鬆的兩種模式。當日歷處於寬鬆模式時,它會接受比其生成的更寬範圍的日曆字段值。當日歷重新計算日曆字段值以便get()返回時,所有日曆字段都將被標準化。例如,一個寬鬆的GregorianCalendar解釋MONTH == JANUARY,DAY_OF_MONTH == 32月1

一旦這種情況發生......一切都完美的作品就像你說的,因爲DAY_OF_MONTH現在是1月從已歸。29日至3月1日

+0

是的,今天是2014年1月29日。哇,我沒有想到這件事。在更改月份之前,我將'currentCalendar'日期值設置爲1。現在它工作完美。謝謝你爲此節省了我的時間。 – Aryo

+0

@Aryo很高興我能幫到你。你也可以使用'.add()'和'.roll()'進行更精細的控制 - 查看Javadoc主要描述中的最後一段。 –

相關問題