Android:使用文本视图中显示的时间在时间​​选择器中设置时间

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/12494074/
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-20 10:49:01  来源:igfitidea点击:

Android: Setting time in time picker with the time shown in text view

androidtimeandroid-timepicker

提问by Nitish

In my app, I am showing time in text view as 07:00 PM. On click of the text view, a time picker dialog pops up, In that time picker, I have to show exactly the same time as what is appearing in textview. But, I am not getting how to do that.

在我的应用程序中,我在文本视图中将时间显示为 07:00 PM。单击文本视图时,会弹出一个时间选择器对话框,在该时间选择器中,我必须显示与文本视图中显示的时间完全相同的时间。但是,我不知道该怎么做。

CODE

代码

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm a");
        //int hr = 0;
        Date date = null;
        try 
        {
            date = sdf.parse(resDateArray[3]);
        } 
        catch (ParseException e) {
            e.printStackTrace();
        }
        final Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        //tp is reference variable for time picker

        tp.setCurrentHour(calendar.get(Calendar.HOUR));
        tp.setCurrentMinute(calendar.get(Calendar.MINUTE));

        }//else

回答by abecker

You should use a SimpleDateFormatto get a Dateobject from your String. Then just call

您应该使用SimpleDateFormat以获得Date从你的对象String。然后就打电话

picker.setCurrentHour(date.getHours())

and

picker.setCurrentMinute(date.getMinutes())

Since the Dateobject is deprecated, you should use a Calendarinstead of it. You can instantiate a Calendarthis way:

由于该Date对象已被弃用,您应该使用 aCalendar代替它。您可以通过Calendar以下方式实例化 a :

Calendar c = Calendar.getInstance();
c.setTime(date);
picker.setCurrentHour(c.get(Calendar.HOUR_OF_DAY));
picker.setCurrentMinute(c.get(Calendat.MINUTE));

Edit: the complete code:

编辑:完整代码:

import java.util.Date;
import java.text.SimpleDateFormat; //Don't use "android.icu.text.SimpleDateFormat"
import java.text.ParseException; //Don't use "android.net.ParseException"

SimpleDateFormat sdf = new SimpleDateFormat("hh:mm");
Date date = null;
try {
    date = sdf.parse("07:00");
} catch (ParseException e) {
}
Calendar c = Calendar.getInstance();
c.setTime(date);

TimePicker picker = new TimePicker(getApplicationContext());
picker.setCurrentHour(c.get(Calendar.HOUR_OF_DAY));
picker.setCurrentMinute(c.get(Calendar.MINUTE));

回答by Aravin

If anybody using the following format that is without using timepicker widget use this one..

如果有人使用以下格式而不使用 timepicker 小部件,请使用这个..

mStartTime.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            new TimePickerDialog(AddAppointmentActivity.this, onStartTimeListener, calendar
                    .get(Calendar.HOUR), calendar.get(Calendar.MINUTE), false).show();

        }
    });

TimePickerDialog.OnTimeSetListener onStartTimeListener = new OnTimeSetListener() {

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

        mStartTime.setText(hourOfDay + " : " + minute + "  " + AM_PM);
        calendar.set(Calendar.HOUR, hourOfDay);
        calendar.set(Calendar.MINUTE, minute);

    }
};

回答by Faraz Ahmed

I have created this helper function to get time

我创建了这个辅助函数来获取时间

        public static void showTime(final Context context, final TextView textView) {

    final Calendar myCalendar = Calendar.getInstance();
    TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            String am_pm = "";
            myCalendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
            myCalendar.set(Calendar.MINUTE, minute);
            if (myCalendar.get(Calendar.AM_PM) == Calendar.AM)
                am_pm = "AM";
            else if (myCalendar.get(Calendar.AM_PM) == Calendar.PM)
                am_pm = "PM";
            String strHrsToShow = (myCalendar.get(Calendar.HOUR) == 0) ? "12" : myCalendar.get(Calendar.HOUR) + "";
            //UIHelper.showLongToastInCenter(context, strHrsToShow + ":" + myCalendar.get(Calendar.MINUTE) + " " + am_pm);
            textView.setText(strHrsToShow + ":" + myCalendar.get(Calendar.MINUTE) + " " + am_pm);
        }
    };
    new TimePickerDialog(context, mTimeSetListener, myCalendar.get(Calendar.HOUR), myCalendar.get(Calendar.MINUTE), false).show();
}

and How to get current time in required format, I use following code. // PARAM Date is date of time you want to format // PARAM currentFormat of date // PARAM requiredFormat of date

以及如何以所需格式获取当前时间,我使用以下代码。// PARAM Date 是要格式化的时间日期 // PARAM currentFormat of date // PARAM requiredFormat of date

    public static String getFormattedDate(String date, String currentFormate, String requiredFormate) {
    //SimpleDateFormat formatActual = new SimpleDateFormat("yyyy - MM - dd");
    if (date != null) {
        SimpleDateFormat formatActual = new SimpleDateFormat(currentFormate);
        Date dateA = null;
        try {
            dateA = formatActual.parse(date);
            System.out.println(dateA);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        //SimpleDateFormat formatter = new SimpleDateFormat("dd MMM, yyyy");
        SimpleDateFormat formatter = new SimpleDateFormat(requiredFormate);
        String format = formatter.format(dateA);
        System.out.println(format);
        return format;
    } else {
        return "";
    }

}

usage of getFormattedDate is:

getFormattedDate 的用法是:

       String date = getFormattedDate(dateYouWantToFormate,"hh:mm a","hh:mm");

回答by Shwetank

One important point has to be kept in mind while retrieving time in onTimeSet()function, there is no special function to set AM_PMin the calendar instance. When we set the time AM_PMis automatically set accordingly like if AM was selected while choosing hour and minute then <calendarVariable>.get(Calendar.AM_PM)will return 0 and in opposite case (in case of PM) it will return 1.

onTimeSet()函数中检索时间时必须牢记一个重点AM_PM,日历实例中没有要设置的特殊函数。当我们设置时间时,AM_PM会自动设置相应的时间,就像在选择小时和分钟时选择了 AM 则<calendarVariable>.get(Calendar.AM_PM)返回 0,反之(在 PM 的情况下)它将返回 1。

回答by Hardikgiri Goswami

For AM/PM you have to implement a logic for that and that is as below.. so you can get the output as you mentioned ... just try below code...

对于 AM/PM,您必须为此实现一个逻辑,如下所示......所以你可以获得你提到的输出......只需尝试下面的代码......

int hr=tp.getCurrentHour();
String a="AM";
if(hr>=12){
    hr=hr-12;
    a="PM";
}
String tm=hr+":"+tp.getCurrentMinute()+" "+a;

Toast.makeText(MainActivity.this, tm, 500).show();

回答by Brandon

If you're using the TimePicker nowdays its probably best to check the Build Version as the setCurrentHour and setCurrentMinute has been deprecated.

如果您现在使用 TimePicker,最好检查构建版本,因为 setCurrentHour 和 setCurrentMinute 已被弃用。

SimpleDateFormat sdf = new SimpleDateFormat("hh:ss");
Date date = null;
try {
    date = sdf.parse("07:00");
} catch (ParseException e) {
}
Calendar c = Calendar.getInstance();
c.setTime(date);

TimePicker timePicker = new TimePicker(getApplicationContext());

if (Build.VERSION.SDK_INT >= 23) {
    timePicker.setHour(calculateHours());
    timePicker.setMinute(calculateMinutes());
}
else {
    timePicker.setCurrentHour(calculateHours());
    timePicker.setCurrentMinute(calculateMinutes());
}

回答by Savas Adar

Some changes after sdk version 23;

sdk 23 版之后的一些变化;

            SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
            Date date = null;
            try {
                date = sdf.parse("12:02:32");
            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            if(date != null) {
                Calendar c = Calendar.getInstance();
                c.setTime(date);
                sleepTimeStartPicker.setHour(c.get(Calendar.HOUR_OF_DAY));
                sleepTimeStartPicker.setMinute(c.get(Calendar.MINUTE));
            }