2011-09-23 30 views
15

Tôi muốn đặt báo thức dựa trên lựa chọn của người dùng trong TimePicker. TimePicker được đặt thành chế độ AM/PM. Để biết liệu người dùng có muốn báo thức của mình đặt thành 10 giờ sáng hoặc 10 giờ tối không, tôi nên nhận giá trị AM/PM như thế nào?TimePicker - cách nhận AM hoặc PM?

Trình nghe TimePickerDialog.OnTimeSetListener chỉ chuyển giờ và phút.

Trả lời

1

Tôi nghĩ rằng gọi lại sẽ được gọi theo giờ theo định dạng 24 vì. Hộp thoại sử dụng TimePicker nội bộ. Và TimePickergetCurrentHour moethod, trả về giờ ở định dạng 0-23.

11

Bạn có thể nhận được AM/PM từ Timepicker bằng cách sử dụng phương pháp sau. Timepicker là một nhóm xem.Đó là lý do tại sao chúng tôi có thể nhận được chỉ số xem con 2 của nó thể hiện AM/PM thực sự là một nút. Vì vậy, chúng tôi có thể nhận được văn bản của nó.

Mycallback=new OnTimeSetListener() { 

     public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
     ViewGroup vg=(ViewGroup) view.getChildAt(0); 
      Toast.makeText(TimePickerDemoActivity.this, hourOfDay+":"+minute+":"+((Button)vg.getChildAt(2)).getText().toString(), 5000).show(); 

     } 
    }; 
+4

Nó không phải là một cách thích hợp. Nó hoạt động trên 2,2 nhưng không hoạt động trên 4.1 –

+0

Tôi đã sử dụng một cách tiếp cận khác. Tôi đã đăng giải pháp của mình làm câu trả lời. –

2

tôi đã làm nó bằng Lịch, và điều đó sẽ làm việc trên tất cả các phiên bản:

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":Integer.toString(datetime.get(Calendar.HOUR)); 


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

Thông báo việc sử dụng các Calendar.HOUR_OF_DAYCalendar.HOUR nếu bạn đi đến các tài liệu của cả hai bạn muốn biết các trick.

12

On gọi lại từ

public void onTimeSet(TimePicker view, int hourOfDay, int minute) 

cuộc gọi dưới chức năng

private String getTime(int hr,int min) { 
     Time tme = new Time(hr,min,0);//seconds by default set to zero 
     Format formatter; 
     formatter = new SimpleDateFormat("h:mm a"); 
     return formatter.format(tme); 
    } 

Các chức năng quay trở lại một cái gì đó như thế này 13:12

17

Trên câu trả lời là đúng tôi tìm thấy cách đơn giản nhất để tìm AM PM .

TimePickerDialog.OnTimeSetListener onStartTimeListener = new OnTimeSetListener() { 

    public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
     String AM_PM ; 
     if(hourOfDay < 12) { 
      AM_PM = "AM"; 
     } else { 
      AM_PM = "PM"; 
     } 

     mStartTime.setText(hourOfDay + " : " + minute + " " + AM_PM); 
    } 
}; 
+2

Nếu định dạng thời gian là 24 giờ, tại sao chúng ta cần AM_PM? Có cách nào khác để có được AM_PM ở định dạng 12 giờ không? – Simon

7

Tôi rất muốn để lại nhận xét này nhưng tôi không có đủ danh tiếng. Do sự xa cách cô đọng nhất để có được AM hoặc PM đang sử dụng các nhà điều hành ternary:

String am_pm = (hourOfDay < 12) ? "AM" : "PM"; 
+0

nhưng bạn nên làm gì nếu bạn đang ở chế độ am-pm ... is24HourView() trả về false. http://developer.android.com/reference/android/widget/TimePicker.html#is24HourView() – likejiujitsu

+0

[Điều tương tự] (http://stackoverflow.com/questions/2659954/timepickerdialog-and-am-or-pm/2660148 # 2660148) – Mack

0

ví dụ: TimePicker sellerTime = (TimePicker) findViewById (R.id.sellerTime);

Integer.toString (((sellerTime.getCurrentHour(). IntValue())> 12)? ((SellerTime.getCurrentHour(). IntValue()) - 12): (sellerTime.getCurrentHour().intValue())

0

Ở đây tôi lấy ngày hiện tại và thời gian từ hệ thống và cập nhật nó với hộp thoại ngày và chọn thời gian

private int mMonth, mYear, mDay, mHour, mMin;

static static int cuối cùng DTPKR = 1;

static static int cuối cùng TMPKR = 2;

// Lấy ngày hiện tại và thời gian vào DatePicker thoại

public void getCurrentDate(){ 
     final Calendar c = Calendar.getInstance(); 
     mYear = c.get(Calendar.YEAR); 
     mMonth = c.get(Calendar.MONTH); 
     mDay = c.get(Calendar.DAY_OF_MONTH); 
    } 

    public void getCurrentTime(){ 
       final Calendar c = Calendar.getInstance(); 
      mHour = c.get(Calendar.HOUR_OF_DAY); 
      mMin = c.get(Calendar.MINUTE); 

     } 

Bây giờ tạo ra các hộp thoại và cập nhật các giá trị // Tạo hộp thoại

protected Dialog onCreateDialog(int id) { 
     switch (id) { 
     case DTPKR: 
      return new DatePickerDialog(this,lisDate, mYear, mMonth, mDay); 
     case TMPKR: 
      return new TimePickerDialog(this,lisTime,mHour, mMin, false); 
     } 
     return null; 
    } 

    //setting date and updating editText 

     DatePickerDialog.OnDateSetListener lisDate = new DatePickerDialog.OnDateSetListener() { 
       @Override 
       public void onDateSet(DatePicker view, int year, int monthOfYear, 
       int dayOfMonth) { 
        mYear = year; 
        mMonth = monthOfYear; 
        mDay = dayOfMonth; 
       etDate.setText(new StringBuilder() .append(mDay).append("/").append(mMonth+1).append("/").append(mYear)); 
       getCurrentDate();  

      } 
    }; 

    //setting time and updating editText 

    TimePickerDialog.OnTimeSetListener lisTime=new TimePickerDialog.OnTimeSetListener() { 

     @Override 
     public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
      mHour=hourOfDay; 
      mMin=minute; 

      String AM_PM ; 
       if(hourOfDay < 12) { 
        AM_PM = "AM"; 

       } else { 
        AM_PM = "PM"; 
        mHour=mHour-12; 
       } 
       etTime.setText(mHour+":"+mMin+" "+AM_PM); 
       getCurrentDate(); 
     } 
    }; 
Các vấn đề liên quan