32

TimePicker でのユーザーの選択に基づいてアラームを設定したいと考えています。TimePicker は AM/PM モードに設定されています。ユーザーがアラームを午前 10 時に設定するか午後 10 時に設定するかを知るには、AM/PM の値を取得するにはどうすればよいですか?

リスナーTimePickerDialog.OnTimeSetListenerは時間と分のみを渡します。

4

9 に答える 9

35

上記の答えは正しいです。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 );
    }
};
于 2013-10-11T09:50:23.700 に答える
21

からのコールバック時

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

以下の関数を呼び出す

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);
    }

関数は次のようなものを返します 1:12 PM

于 2013-09-16T15:01:04.817 に答える
12

これをコメントとして残しておきたかったのですが、十分な評判がありません。AM または PM を取得する最も簡潔な方法は、三項演算子を使用することです。

String am_pm = (hourOfDay < 12) ? "AM" : "PM";
于 2013-12-15T14:31:52.473 に答える
11

次の方法を使用して、Timepicker から AM/PM を取得できます。Timepicker はビューグループです。そのため、AM/PM が実際にはボタンであることを示す子ビュー インデックス 2 を取得できます。したがって、そのテキストを取得できます。

 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();

        }
    };
于 2012-08-03T12:24:46.070 に答える
5

Calendar を使用して実行しましたが、すべてのバージョンで動作するはずです。

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 );
}

の使用に注意してCalendar.HOUR_OF_DAYくださいCalendar.HOUR。両方のドキュメントにアクセスすると、トリックがわかります。

于 2013-02-21T14:52:18.897 に答える
5

ここでは、システムから現在の日付と時刻を取得し、日付と時刻のピッカー ダイアログで更新しています。

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

public static final int DTPKR = 1;

public static final int TMPKR = 2;

// Getting  the current date and time into DatePicker dialog

    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);

      } 

ここでダイアログを作成し、値を更新します //Creating dialogs

    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();
        }
    };
于 2014-05-29T11:01:06.813 に答える
2

それが役立つかどうかはわかりませんが、私は同じことをやっています。ここで私の返信を参照してください TimePickerDialogとAMまたはPM

于 2011-12-30T19:14:09.620 に答える
1

コールバックは、24 形式の時間で呼び出されると思います。ダイアログはTimePicker内部で使用します。また、時間を 0 ~ 23 の形式で返すgetCurrentHourTimePickerメソッドがあります。

于 2011-09-23T09:56:38.123 に答える