Java 如何从android中的timepicker获取小时和分钟

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/18606201/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-12 09:27:03  来源:igfitidea点击:

how to get hour and minute from timepicker in android

javaandroidtimepicker

提问by Paul

This is code I got for TimePicker.

这是我为 TimePicker 获得的代码。

TimePicker.java

时间选择器

public class TimePicker extends EditText implements
    android.app.TimePickerDialog.OnTimeSetListener {
public interface OnTimeSetListener {
    public void onTimeSet(TimePicker view, int hour, int minute);
}

protected int hour;
protected int minute;
protected OnTimeSetListener onTimeSetListener;
protected java.text.DateFormat timeFormat;

public int getHour() {
    return hour;
}

public OnTimeSetListener getOnTimeSetListener() {
    return onTimeSetListener;
}

public void setOnTimeSetListener(OnTimeSetListener onTimeSetListener) {
    this.onTimeSetListener = onTimeSetListener;
}

public void setHour(int hour) {
    this.hour = hour;
    updateText();
}

public int getMinute() {
    return minute;
}

public void setNow() {
    Calendar c = Calendar.getInstance();
    setTime(c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE));
}

public void setMinute(int minute) {
    this.minute = minute;
    updateText();
}

public void setTime(int hour, int minute) {
    this.hour = hour;
    this.minute = minute;
    updateText();
}

public TimePicker(Context context, AttributeSet attrs) {
    super(context, attrs);

    timeFormat = DateFormat.getTimeFormat(getContext());

    setInputType(InputType.TYPE_DATETIME_VARIATION_DATE);
    setFocusable(false);
    setNow();
}

protected void showTimePicker() {
    TimePickerDialog timePickerDialog;

    timePickerDialog = new TimePickerDialog(getContext(), this, getHour(),
            getMinute(), true);
    timePickerDialog.show();
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN)
        showTimePicker();

    return super.onTouchEvent(event);
}

public java.text.DateFormat getTimeFormat() {
    return timeFormat;
}

public void setTimeFormat(java.text.DateFormat timeFormat) {
    this.timeFormat = timeFormat;
    updateText();
}

@Override
public void onTimeSet(android.widget.TimePicker view, int hour, int minute) {
    // TODO Auto-generated method stub
    setTime(hour, minute);
    clearFocus();

    if (onTimeSetListener != null){
        onTimeSetListener.onTimeSet(this, hour, minute);
    }

}

public void updateText() {
    Calendar cal = new GregorianCalendar(0, 0, 0, getHour(), getMinute());
    setText(timeFormat.format(cal.getTime()));
}

}

}

calendar_events.xml

calendar_events.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:background="@color/maroon"
    tools:context="com.gpplsmje.mac.calendar.CalendarEvents" >

    <com.gpplsmje.mac.calendar.utils.TimePicker
        android:id="@+id/alarm_time"
        style="@android:style/Widget.Holo.Light.Spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="60"
        android:gravity="center"
        android:textColor="@color/white" />
    </RelativeLayout>

CalendarEvents.java

日历事件.java

public class CalendarEvents extends Activity implements OnClickListener {
    TimePicker notifyTime;

Button back, cancel, done;
int hour, minute, day, month, year;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.calendar_events);
    onNewIntent(getIntent());

    notifyTime = ((TimePicker) findViewById(R.id.alarm_time));
    notifyTime.setTimeFormat(DateFormat.getTimeFormat(this));

    hour = notifyTime.getHour();
    minute = notifyTime.getdMinute();

    done.setOnClickListener(this);
}
@Override
public void onClick(View v) {
    switch (v.getId()){
    case R.id.bDone:
        Toast.makeText(this, year + " " + month + " " + day + " " + hour + " " + minute , Toast.LENGTH_LONG).show();
        break;
    }
}

I made a Toastmessage to check if what I have selected from the TimePickeris the right thing. But every time I run this code it always gives me the current time on my machine and not the time I selected from the TimePicker. How do I accomplish this? Can any one please help me? Thanks in advance.

我发了一条Toast消息来检查我从中选择的内容TimePicker是否正确。但是每次我运行这段代码时,它总是给我机器上的当前时间,而不是我从TimePicker. 我该如何实现?谁能帮帮我吗?提前致谢。

回答by Umang Mehta

To read the time entered by the user, Use a listener

要读取用户输入的时间,请使用侦听器

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

回答by kalyan pvs

Use this method setOnTimeChangedListener(TimePicker.OnTimeChangedListener onTimeChangedListener)

使用这个方法 setOnTimeChangedListener(TimePicker.OnTimeChangedListener onTimeChangedListener)

and this class when working with timepicker. timepicker

以及使用 timepicker 时的此类。 时间选择器

not onclick listener on it..

不是 onclick 监听器就可以了..

回答by jbr3zy

If you clear focus from the TimePicker in your onClick()handler, you can use its public methodsto get the selected time values as integers:

如果您从onClick()处理程序中的 TimePicker 清除焦点,则可以使用其公共方法将选定的时间值作为整数获取:

public void onClick(View v) {
    ...
    notifyTime = ((TimePicker) findViewById(R.id.alarm_time));
    notifyTime.clearFocus();

    hour = notifyTime.getCurrentHour();
    minute = notifyTime.getCurrentMinute();
    ....
}

回答by jbr3zy

This way you can get the time

这样你就可以得到时间

Calendar mCalendar = Calendar.getInstance();

 mHour = mCalendar.get(Calendar.HOUR_OF_DAY);
 mMinute = mCalendar.get(Calendar.MINUTE);

 TimePickerDialog timePickerDialog = new TimePickerDialog(mActivity, mTimeSetListener, mHour, mMinute, false);

 private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
     public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

         mCalendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
         mCalendar.set(Calendar.MINUTE, mMinute);
         SimpleDateFormat mSDF = new SimpleDateFormat("hh:mm a");
         String time = mSDF.format(mCalendar.getTime());
     }
 }