2014-05-23 51 views
1

這是一個非常煩人的問題,我一直面臨幾天。我正在使用Genymotion模擬器。代碼如下:日曆給出錯誤的日期和時間

 DatePicker dp = (DatePicker) d.findViewById(R.id.datePicker1); 
     TimePicker tp = (TimePicker) d.findViewById(R.id.timePicker1); 

     Calendar.getInstance(); 

     selectedDate = Calendar.YEAR + "/" + Calendar.MONTH + "/" + Calendar.DAY_OF_MONTH; 
     selectedTime = Calendar.HOUR_OF_DAY + ":" + Calendar.MINUTE; 

     dp.init(Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH, new OnDateChangedListener() 
     { 
      @Override public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) 
      { 
       selectedDate = dayOfMonth + "/" + monthOfYear + 1 + "/" + year; 
      } 
     }); 

當調試上面的代碼,並觀察的Calendar.MONTH值Calendar.DAY_OF_MONTH,他們錯了。小時和分鐘值相同(當前時間是17:25,但日曆給出11:12)。

我在做什麼錯? TimerPicker會自動初始化到同一設備上的正確時間。

+0

請問,當你在物理設備上運行相同的發生呢? –

回答

2

Calendar.HOUR_OF_DAY是由Android分配常數。

當你使用它Calendar.HOUR_OF_DAY不給你當前的小時它給你的值的Android分配至恆Calendar.HOUR_OF_DAY

如果你想獲得你需要做的

Calendar cal = Calendar.getInstance(); 
當前時間

,然後如果你想獲取當前的小時檢索它像

cal.get(Calendar.HOUR_OF_DAY); 

這會給你當前的小時相同專家組s爲任何其他價值。

說明:當您檢索MONTH時,它會給您少1個值例如。對於5月份,它將返回4,因爲它基於0索引值。

所以爲了得到今天的日期和時間,你必須做

selectedDate = cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH)+1) + "/" + cal.get(Calendar.DAY_OF_MONTH); 
selectedTime = cal.get(Calendar.HOUR_OF_DAY) + ":" + cal.get(Calendar.MINUTE); 
+0

謝謝:)我已經修復它自己,但不想刪除問題,因爲它可能對別人有幫助。標記正確。 – Asim

0

嘗試此

Calendar cal = Calendar.getInstance(); 

    selectedDate = cal.YEAR + "/" + cal .MONTH + "/" + cal.DAY_OF_MONTH; 
    selectedTime = cal.HOUR_OF_DAY + ":" + cal.MINUTE; 

    dp.init(cal.YEAR, cal.MONTH, cal.DAY_OF_MONTH, new OnDateChangedListener() 
    { 
     @Override public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) 
     { 
      selectedDate = dayOfMonth + "/" + monthOfYear + 1 + "/" + year; 
     } 
    }); 
+1

你改變了什麼?你能解釋什麼是不同的,爲什麼?它對初學者更有幫助,如果你對你提出的答案提供某種解釋 – CurlyPaul

+0

這是錯誤的,因爲你仍然指的是由'Android'分配的'Constants'沒有得到實際值。 – Apoorv

+0

我將Calendar對象更改爲Calendar的getInstance方法,該方法返回其語言環境基於系統設置並且其時間字段已用當前日期和時間初始化的日曆 –