2011-05-13 95 views
1

我正在嘗試使用datepicker和timepicker對話框創建一個unix時間戳,但發生的問題是一天總是關閉一個。例如。如果我選擇5月10日,它將顯示5月11日作爲輸出。其他的一切似乎都沒有問題。任何建議都會很棒。Android DatePicker每月關閉一個?

日期和timepicker代碼如下...

private DatePickerDialog.OnDateSetListener mDateSetListener = 
    new DatePickerDialog.OnDateSetListener() { 

     public void onDateSet(DatePicker view, int year, 
           int monthOfYear, int dayOfMonth) { 
      mYear = year; 
      mMonth = monthOfYear; 
      mDay = dayOfMonth; 
     } 
    }; 

private TimePickerDialog.OnTimeSetListener mTimeSetListener = 
new TimePickerDialog.OnTimeSetListener() { 
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
     mHour = hourOfDay; 
     mMinute = minute; 
     confirmDateChange(); 
    } 
}; 

@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 
    case DATE_DIALOG_ID: 
     return new DatePickerDialog(this, 
        mDateSetListener, 
        mYear, mMonth, mDay); 
    case TIME_DIALOG_ID: 
    return new TimePickerDialog(this, 
      mTimeSetListener, mHour, mMinute, false);   
    } 
    return null; 
} 

接下來,我把這個拿到時間戳

private long componentTimeToTimestamp(int year, int month, int day, int hour, int minute) { 

    Calendar c = Calendar.getInstance(); 
    c.set(Calendar.YEAR, year); 
    c.set(Calendar.MONTH, month); 
    c.set(Calendar.DAY_OF_MONTH, day); 
    c.set(Calendar.HOUR, hour); 
    c.set(Calendar.MINUTE, minute); 
    c.set(Calendar.SECOND, 0); 
    c.set(Calendar.MILLISECOND, 0);  
    return (c.getTimeInMillis()/1000L);   
} 

而且最後這個設置在一個TextView的價值,但就像我說的每月的一天總是關閉一個

long mydate = componentTimeToTimestamp(mYear, mMonth, mDay, mHour, mMinute); 
    long datemod = mydate * 1000; 
    final java.util.Date d = new java.util.Date(datemod);  
    details.setText(d.toLocaleString()); 
+0

的toLocaleString()已過時,我認爲。離開我的頭頂,我忘記了目前的首選方式。我認爲這是DateFormat類。你可以嘗試使用它將你的long變成dateStr,看看它是否有所作爲。如果始終關閉一個,那麼它會更快,更容易,但在顯示它之前將其返回一天並不「正確」。 – FoamyGuy 2011-05-13 19:19:32

+0

該方法的話很好,因爲我用它來添加時間戳到數據庫並檢索它們。這完美的作品:long timestamp = date * 1000; java.util.Date d = new java.util.Date(timestamp); mDate.setText(d.toLocaleString()); – Paul 2011-05-13 19:24:51

+0

如果您100%確定該方法有效,那麼錯誤可能是由於除以1000L然後乘以1000,我不明白爲什麼這將是一個問題。否則日期選擇器報告錯誤。也許在通過ToTimeStamp()方法發送它之前轉儲DatePicker所提供給您的信息,看看它是否在那裏出現。 – FoamyGuy 2011-05-13 19:28:16

回答

1

雖然你想出了答案在comment.But u mus噸有在這裏回答了這個問題,因爲大多數人不會混淆,它沒有沒有answered.Please閱讀註釋,然後去爲這個答案

c.set(year, month, day, hour, minute, 0);