2010-04-17 73 views
40

我有一個TimePickerDialog與is24Hour設置爲false,因爲我想給最終用戶提供更熟悉的12小時格式。如果設置了小時,分鐘和AM PM指示燈並返回時間,我如何確定最終用戶是選擇了AM還是PM?TimePickerDialog和上午或下午

這就是我對聽衆:

private TimePickerDialog.OnTimeSetListener mTimeSetListener = 
     new TimePickerDialog.OnTimeSetListener() { 

    @Override 
    public void onTimeSet(TimePicker view, int hourOfDay, 
     int minute) { 
    mHour = hourOfDay; 
    mMinute = minute; 
    // mIsAM = WHERE CAN I GET THIS VALUE 
    } 
}; 

回答

56

hourOfDay將永遠是24小時。如果您打開對話框is24HourView設置爲false,用戶將不必處理24小時格式化的時間,但Android會將其轉換爲24小時時間,當它調用onTimeSet()時。

+0

非常感謝您的快速響應。我沒有從文檔中獲得。 – JDM 2010-04-17 21:38:20

+5

是的,它不是真的在文檔中::-) – CommonsWare 2010-04-17 22:03:34

+14

您可以通過以下方式獲得用戶的首選24小時設置:DateFormat.is24HourFormat(context); – 2011-09-27 15:50:25

8

我遇到了同樣的問題。我在我的應用程序中有一個TimePicker,在你選擇一個時間並點擊一個按鈕後,你將會進入一個顯示什麼時間被選中的屏幕。選擇的「時間」是正確的,但有時AM/PM的價值會與所選的相反。我最終通過改變我爲TimePicker中的「hrs」參數存儲的內容來修復它。

private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() 
{ 
    @Override 
    public void onTimeSet(TimePicker view, int hrs, int mins) 
    { 
     hour = hrs; 
     minute = mins; 

     c = Calendar.getInstance(); 
     c.set(Calendar.HOUR_OF_DAY, hour); 
     //instead of c.set(Calendar.HOUR, hour); 
     c.set(Calendar.MINUTE, minute); 

現在,當我點擊按鈕進入下一個屏幕時,它正確顯示了正確的AM/PM值。

+0

的任何解決方案這是正確的答案,榮譽 – 2015-11-22 13:18:56

+0

做到了這個把戲... thanx – Satyavrat 2016-03-31 06:11:23

31

這爲我工作:

public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
    String am_pm = ""; 

    Calendar datetime = Calendar.getInstance(); 
    datetime.set(Calendar.HOUR_OF_DAY, hourOfDay); 
    datetime.set(Calendar.MINUTE, minute); 

    if (datetime.get(Calendar.AM_PM) == Calendar.AM) 
     am_pm = "AM"; 
    else if (datetime.get(Calendar.AM_PM) == Calendar.PM) 
     am_pm = "PM"; 

    String strHrsToShow = (datetime.get(Calendar.HOUR) == 0) ?"12":datetime.get(Calendar.HOUR)+""; 

    ((Button)getActivity().findViewById(R.id.btnEventStartTime)).setText(strHrsToShow+":"+datetime.get(Calendar.MINUTE)+" "+am_pm); 
} 
+0

這是正是我正在尋找的!謝謝! – LargeGlasses 2013-11-18 16:42:04

+0

@LargeGlasses快樂,它幫助你:-) – 2013-11-18 19:37:33

+0

感謝它完美的工作,罰款...... !!!! – 2014-06-03 11:45:21

10

嗨,你可以用你自己的格式如下:

String myFormat = "hh:mm a"; // your own format 
    SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US); 
    String formated_time = sdf.format(calendar_time.getTime()); //format your time 

我發現,「A」進行格式化時表示AM-PM代碼:http://www.tutorialspoint.com/java/java_date_time.htm

+1

+投票保存我的時間:) – 2014-06-07 06:55:46

+0

非常感謝你..使我的夜晚:P – 2016-05-10 17:59:04

8

與選定的表示適當HH什麼用戶一個整潔的吐司信息:MM格式

public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
     String AM_PM = " AM"; 
     String mm_precede = ""; 
     if (hourOfDay >= 12) { 
      AM_PM = " PM"; 
      if (hourOfDay >=13 && hourOfDay < 24) { 
       hourOfDay -= 12; 
      } 
      else { 
       hourOfDay = 12; 
      } 
     } else if (hourOfDay == 0) { 
      hourOfDay = 12; 
     } 
     if (minute < 10) { 
      mm_precede = "0"; 
     } 
     Toast.makeText(mContext, "" + hourOfDay + ":" + mm_precede + minute + AM_PM, Toast.LENGTH_SHORT).show(); 
    } 
2

試試這個:

 Calendar calendar = Calendar.getInstance(); 
     calendar.set(0, 0, 0, hourOfDay, minute, 0); 
     long timeInMillis = calendar.getTimeInMillis(); 
     java.text.DateFormat dateFormatter = new SimpleDateFormat("hh:mm a"); 
     Date date = new Date(); 
     date.setTime(timeInMillis); 
     time.setText(dateFormatter.format(date)); 
2

如果你的期望是直接設置AM/PM在時間選擇器對話框中,有一個變通。如果您預先使用當前/默認時間填充EditText,這將起作用。 - 在實例化對話框之前,如果EditText具有PM時間值,則將小時分量增加12。

sref_Time3是ampm值; sref_Time1是小時分量。

if (sref_Time3.equals("PM")) { 
     hour = hour + 12; 
    } else if (sref_Time1.equals("12")) { 
     hour = 0; 
    } 
    // Create a new instance of TimePickerDialog and return it 
    return new TimePickerDialog(getActivity(), this, hour, minute, 
       DateFormat.is24HourFormat(getActivity())); 

謝謝&謝謝。

Screen Time Picker Dialog

1

這個工作對我來說:

TimePickerDialog timePickerDialog = new TimePickerDialog(AddFocusActivity.this, new TimePickerDialog.OnTimeSetListener() { 
     @Override 
     public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
      calendar.set(Calendar.MINUTE, minute); 
      calendar.set(Calendar.HOUR,hourOfDay); 
      time = calendar.get(Calendar.HOUR) 
        + ((calendar.get(Calendar.AM_PM) == Calendar.AM) ? "am" : "pm"); 

      Log.e("time",time); 

     } 
    },calendar.get(Calendar.HOUR_OF_DAY),calendar.get(Calendar.MINUTE), false); 
0
private TimePickerDialog.OnTimeSetListener timeSetListener = new TimePickerDialog.OnTimeSetListener() { 
     @Override 
     public void onTimeSet(TimePicker view, int hourOfDay, int minute) {  
      boolean isPM = (hourOfDay >= 12); 
      tvTime.setText(String.format("%02d:%02d %s", (hourOfDay == 12 || hourOfDay == 0) ? 12 : hourOfDay % 12, minute, isPM ? "PM" : "AM")); 
     } 
    }; 
1
public static class TimePickerFragment extends DialogFragment 
     implements TimePickerDialog.OnTimeSetListener { 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // Use the current time as the default values for the picker 
     final Calendar c = Calendar.getInstance(); 
     int hour = c.get(Calendar.HOUR); 
     int minute = c.get(Calendar.MINUTE); 

     // Create a new instance of TimePickerDialog and return it 
     return new TimePickerDialog(getActivity(), this, hour, minute, 
       DateFormat.is24HourFormat(getActivity())); 
    } 

    public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
     Calendar calendar = Calendar.getInstance(); 
     calendar.set(0, 0, 0, hourOfDay, minute); 
     textView.setText((String) DateFormat.format("hh:mm aaa", calendar)); 
    } 
} 


//For showing the dialog put below two lines where you want to call 

TimePickerFragment timePickerFragment = new TimePickerFragment(); 
timePickerFragment.show(getSupportFragmentManager(), "TimePicker"); 
6

試試這個簡單的方法:

void openTimeFragment() { 
     TimePickerDialog mTimePicker; 

     final Calendar c = Calendar.getInstance(); 
     int hour = c.get(Calendar.HOUR_OF_DAY); 
     int minute = c.get(Calendar.MINUTE); 

     mTimePicker = new TimePickerDialog(YourActivity.this, new TimePickerDialog.OnTimeSetListener() { 
      @Override 
      public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) { 



       String time = selectedHour + ":" + selectedMinute; 

        SimpleDateFormat fmt = new SimpleDateFormat("HH:mm"); 
     Date date = null; 
     try { 
      date = fmt.parse(time); 
     } catch (ParseException e) { 

      e.printStackTrace(); 
     } 

     SimpleDateFormat fmtOut = new SimpleDateFormat("hh:mm aa"); 

      String formattedTime=fmtOut.format(date); 

       edtTextTime.setText(formattedTime); 
      } 
     }, hour, minute, false);//No 24 hour time 
     mTimePicker.setTitle("Select Time"); 
     mTimePicker.show(); 
    } 
+0

不錯,簡單的解決方案。謝謝:) – 2016-10-05 09:09:21

+0

@ Md.SajedulKarim::) – 2016-10-05 09:11:28

+0

起初我忽略你的解決方案,並嘗試其他,但最後它解決了..很好的解決方案謝謝。 – 2017-08-31 05:31:23

5
private String getTime(int hr,int min) { 
     Calendar cal = Calendar.getInstance(); 
     cal.set(Calendar.HOUR_OF_DAY,hr); 
     cal.set(Calendar.MINUTE,min); 
     Format formatter; 
     formatter = new SimpleDateFormat("h:mm a"); 
     return formatter.format(cal.getTime()); 
    } 
1

你可以試試我的解決方案,我用「HH:MM是」格式設置AM/PM時間

SimpleDateFormat formatter = new SimpleDateFormat("hh:mm a", Locale.ENGLISH); 
String formattedTime = formatter.format(myCalendar.getTime()); 
EditText.setText(formattedTime); 
0

我知道這是太晚了答案,完美的答案已經被選中,但我認爲這對初學者不是很清楚,所以張貼我的答案

editText.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // TODO Auto-generated method stub 
      Calendar mcurrentTime = Calendar.getInstance(); 
      int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY); 
      int minute = mcurrentTime.get(Calendar.MINUTE); 

      TimePickerDialog mTimePicker; 
      mTimePicker = new TimePickerDialog(getActivity(), new TimePickerDialog.OnTimeSetListener() { 
       @Override 
       public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) { 
        String AM_PM; 
        if (selectedHour >=0 && selectedHour < 12){ 
         AM_PM = "AM"; 
        } else { 
         AM_PM = "PM"; 
        } 
        editText.setText(selectedHour + ":" + selectedMinute+" "+AM_PM); 
       } 
      }, hour, minute, false); 
      mTimePicker.setTitle("Select Time"); 
      mTimePicker.show(); 
     } 
    });