【问题标题】:Android datepicker get date and timeAndroid datepicker 获取日期和时间
【发布时间】:2017-02-20 13:56:05
【问题描述】:

我正在使用 datepicker 在餐厅预订餐桌

我必须使用两个日期选择器,一个用于获取日期,一个用于获取时间

但它对用户不友好 我想同时使用它们

public class MainActivity extends AppCompatActivity {

@RequiresApi(api = Build.VERSION_CODES.N)
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final Calendar c = Calendar.getInstance();
    final int year = c.get(Calendar.YEAR);
    final int month = c.get(Calendar.MONTH);
    final int day = c.get(Calendar.DAY_OF_MONTH);
    final int hour = c.get(Calendar.HOUR_OF_DAY);
    final int minute1 = c.get(Calendar.MINUTE);
    final Calendar v = Calendar.getInstance();
    final int year2 = v.get(Calendar.YEAR);
    final int month2 = v.get(Calendar.MONTH);
    final int day2 = v.get(Calendar.DAY_OF_MONTH);
    final int hour2 = v.get(Calendar.HOUR_OF_DAY);
    final int minute2 = v.get(Calendar.MINUTE);

    final String date;
    final EditText rt1 = (EditText) findViewById(R.id.f1);
    final EditText et1 = (EditText) findViewById(R.id.e1);
    et1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            DatePickerDialog datepick = new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() {
                @Override
                public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {

                }
            } ,year,month,day);
            datepick.setTitle("select date");
            datepick.show();
        }
    rt1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            TimePickerDialog timepick = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {


                @Override
                public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                    rt1.setText(hourOfDay + ":" + minute);


                }
            }, hour, minute1, true
            );
            timepick.setTitle("select time");
            timepick.show();


        }
    });

}}

【问题讨论】:

    标签: android android-datepicker datepickerdialog


    【解决方案1】:

    Android 没有任何内置功能可以执行此操作,您可以创建自己的日期和时间选择器。以下是执行此操作的代码:

    date_time_picker_dialog.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:padding="8dp"
    android:layout_height="match_parent">
    
    <DatePicker
        android:id="@+id/date_picker"
        android:layout_width="match_parent"
        android:calendarViewShown="true"
        android:spinnersShown="false"
        android:layout_weight="4"
        android:layout_height="0dp" />
    
    <TimePicker
        android:id="@+id/time_picker"
        android:layout_weight="4"
        android:layout_width="match_parent"
        android:layout_height="0dp" />
    
    <Button
        android:id="@+id/date_time_ok"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:text="OK"
        android:layout_height="0dp" />
    
    </LinearLayout>
    

    在您的 java 代码 中使用以下代码:

    final View dialogView = View.inflate(activity, R.layout.date_time_picker_dialog, null);
    final AlertDialog alertDialog = new AlertDialog.Builder(activity).create();
    
    dialogView.findViewById(R.id.date_time_ok).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    
         DatePicker datePicker = (DatePicker) dialogView.findViewById(R.id.date_picker);
         TimePicker timePicker = (TimePicker) dialogView.findViewById(R.id.time_picker);
    
         Calendar calendar = new GregorianCalendar(datePicker.getYear(),
                            datePicker.getMonth(),
                            datePicker.getDayOfMonth(),
                            timePicker.getCurrentHour(),
                            timePicker.getCurrentMinute());
    
         time = calendar.getTimeInMillis();
         alertDialog.dismiss();
    }});
    alertDialog.setView(dialogView);
    alertDialog.show();
    

    【讨论】:

      【解决方案2】:

      没有内置的 Picker 可以做到这一点。

      但请查看 GitHub 上的 SublimePicker

      【讨论】:

        【解决方案3】:

        在日期选择器回调中显示时间选择器

        et1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DatePickerDialog datepick = new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() {
        
                    @Override
                    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
        
                        // Date results here
        
                        TimePickerDialog timepick = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
                            @Override
                            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        
                                // Time results here
        
                            }
                        }, hour, minute1, true);
                        timepick.setTitle("select time");
                        timepick.show();
                    }
                } ,year,month,day);
                datepick.setTitle("select date");
                datepick.show();
            }
        }
        

        【讨论】:

        • 不显示日期和时间
        【解决方案4】:

        尝试使用此代码在一个自定义对话框中获取/设置日期和时间:

        CustomDateTimePicker.java

        import android.app.Activity;
        import android.app.Dialog;
        import android.content.DialogInterface;
        import android.view.Gravity;
        import android.view.View;
        import android.view.Window;
        import android.widget.Button;
        import android.widget.DatePicker;
        import android.widget.FrameLayout;
        import android.widget.LinearLayout;
        import android.widget.TimePicker;
        import android.widget.ViewSwitcher;
        
        import java.text.SimpleDateFormat;
        import java.util.Calendar;
        import java.util.Date;
        
        /**
         * Created by admin on 6/29/2016.
         */
        public class CustomDateTimePicker implements View.OnClickListener {
            private DatePicker datePicker;
            private TimePicker timePicker;
            private ViewSwitcher viewSwitcher;
        
            private final int SET_DATE = 100, SET_TIME = 101, SET = 102, CANCEL = 103;
        
            private Button btn_setDate, btn_setTime, btn_set, btn_cancel;
        
            private Calendar calendar_date = null;
        
            private Activity activity;
        
            private ICustomDateTimeListener iCustomDateTimeListener = null;
        
            private Dialog dialog;
        
            private boolean is24HourView = true, isAutoDismiss = true;
        
            private int selectedHour, selectedMinute;
        
            public CustomDateTimePicker(Activity a,
                                        ICustomDateTimeListener customDateTimeListener) {
                activity = a;
                iCustomDateTimeListener = customDateTimeListener;
        
                dialog = new Dialog(activity);
                dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
                    @Override
                    public void onDismiss(DialogInterface dialog) {
                        resetData();
                    }
                });
        
                dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
                View dialogView = getDateTimePickerLayout();
                dialog.setContentView(dialogView);
            }
        
            public View getDateTimePickerLayout() {
                LinearLayout.LayoutParams linear_match_wrap = new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.MATCH_PARENT,
                        LinearLayout.LayoutParams.MATCH_PARENT);
                LinearLayout.LayoutParams linear_wrap_wrap = new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.WRAP_CONTENT,
                        LinearLayout.LayoutParams.WRAP_CONTENT);
                FrameLayout.LayoutParams frame_match_wrap = new FrameLayout.LayoutParams(
                        FrameLayout.LayoutParams.MATCH_PARENT,
                        FrameLayout.LayoutParams.WRAP_CONTENT);
        
                LinearLayout.LayoutParams button_params = new LinearLayout.LayoutParams(
                        0, LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f);
        
                LinearLayout linear_main = new LinearLayout(activity);
                linear_main.setLayoutParams(linear_match_wrap);
                linear_main.setOrientation(LinearLayout.VERTICAL);
                linear_main.setGravity(Gravity.CENTER);
        
                LinearLayout linear_child = new LinearLayout(activity);
                linear_child.setLayoutParams(linear_wrap_wrap);
                linear_child.setOrientation(LinearLayout.VERTICAL);
        
                LinearLayout linear_top = new LinearLayout(activity);
                linear_top.setLayoutParams(linear_match_wrap);
        
                btn_setDate = new Button(activity);
                btn_setDate.setLayoutParams(button_params);
                btn_setDate.setText("Set Date");
                btn_setDate.setId(SET_DATE);
                btn_setDate.setOnClickListener(this);
        
                btn_setTime = new Button(activity);
                btn_setTime.setLayoutParams(button_params);
                btn_setTime.setText("Set Time");
                btn_setTime.setId(SET_TIME);
                btn_setTime.setOnClickListener(this);
        
                linear_top.addView(btn_setDate);
                linear_top.addView(btn_setTime);
        
                viewSwitcher = new ViewSwitcher(activity);
                viewSwitcher.setLayoutParams(frame_match_wrap);
        
                datePicker = new DatePicker(activity);
                timePicker = new TimePicker(activity);
                timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
                    @Override
                    public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
                        selectedHour = hourOfDay;
                        selectedMinute = minute;
                    }
                });
        
                viewSwitcher.addView(timePicker);
                viewSwitcher.addView(datePicker);
        
                LinearLayout linear_bottom = new LinearLayout(activity);
                linear_match_wrap.topMargin = 8;
                linear_bottom.setLayoutParams(linear_match_wrap);
        
                btn_set = new Button(activity);
                btn_set.setLayoutParams(button_params);
                btn_set.setText("Set");
                btn_set.setId(SET);
                btn_set.setOnClickListener(this);
        
                btn_cancel = new Button(activity);
                btn_cancel.setLayoutParams(button_params);
                btn_cancel.setText("Cancel");
                btn_cancel.setId(CANCEL);
                btn_cancel.setOnClickListener(this);
        
                linear_bottom.addView(btn_set);
                linear_bottom.addView(btn_cancel);
        
                linear_child.addView(linear_top);
                linear_child.addView(viewSwitcher);
                linear_child.addView(linear_bottom);
        
                linear_main.addView(linear_child);
        
                return linear_main;
            }
        
            public void showDialog() {
                if (!dialog.isShowing()) {
                    if (calendar_date == null)
                        calendar_date = Calendar.getInstance();
        
                    selectedHour = calendar_date.get(Calendar.HOUR_OF_DAY);
                    selectedMinute = calendar_date.get(Calendar.MINUTE);
        
                    timePicker.setIs24HourView(is24HourView);
                    timePicker.setCurrentHour(selectedHour);
                    timePicker.setCurrentMinute(selectedMinute);
        
                    datePicker.updateDate(calendar_date.get(Calendar.YEAR),
                            calendar_date.get(Calendar.MONTH),
                            calendar_date.get(Calendar.DATE));
        
                    dialog.show();
        
                    btn_setDate.performClick();
                }
            }
        
            public void setAutoDismiss(boolean isAutoDismiss) {
                this.isAutoDismiss = isAutoDismiss;
            }
        
            public void dismissDialog() {
                if (!dialog.isShowing())
                    dialog.dismiss();
            }
        
            public void setDate(Calendar calendar) {
                if (calendar != null)
                    calendar_date = calendar;
            }
        
            public void setDate(Date date) {
                if (date != null) {
                    calendar_date = Calendar.getInstance();
                    calendar_date.setTime(date);
                }
            }
        
            public void setDate(int year, int month, int day) {
                if (month < 12 && month >= 0 && day < 32 && day >= 0 && year > 100
                        && year < 3000) {
                    calendar_date = Calendar.getInstance();
                    calendar_date.set(year, month, day);
                }
        
            }
        
            public void setTimeIn24HourFormat(int hourIn24Format, int minute) {
                if (hourIn24Format < 24 && hourIn24Format >= 0 && minute >= 0
                        && minute < 60) {
                    if (calendar_date == null)
                        calendar_date = Calendar.getInstance();
        
                    calendar_date.set(calendar_date.get(Calendar.YEAR),
                            calendar_date.get(Calendar.MONTH),
                            calendar_date.get(Calendar.DAY_OF_MONTH), hourIn24Format,
                            minute);
        
                    is24HourView = true;
                }
            }
        
            public void setTimeIn12HourFormat(int hourIn12Format, int minute,
                                              boolean isAM) {
                if (hourIn12Format < 13 && hourIn12Format > 0 && minute >= 0
                        && minute < 60) {
                    if (hourIn12Format == 12)
                        hourIn12Format = 0;
        
                    int hourIn24Format = hourIn12Format;
        
                    if (!isAM)
                        hourIn24Format += 12;
        
                    if (calendar_date == null)
                        calendar_date = Calendar.getInstance();
        
                    calendar_date.set(calendar_date.get(Calendar.YEAR),
                            calendar_date.get(Calendar.MONTH),
                            calendar_date.get(Calendar.DAY_OF_MONTH), hourIn24Format,
                            minute);
        
                    is24HourView = false;
                }
            }
        
            public void set24HourFormat(boolean is24HourFormat) {
                is24HourView = is24HourFormat;
            }
        
            public interface ICustomDateTimeListener {
                public void onSet(Dialog dialog, Calendar calendarSelected,
                                  Date dateSelected, int year, String monthFullName,
                                  String monthShortName, int monthNumber, int date,
                                  String weekDayFullName, String weekDayShortName, int hour24,
                                  int hour12, int min, int sec, String AM_PM);
        
                public void onCancel();
            }
        
            @Override
            public void onClick(View v) {
                switch (v.getId()) {
                    case SET_DATE:
                        btn_setTime.setEnabled(true);
                        btn_setDate.setEnabled(false);
                        viewSwitcher.showNext();
                        break;
        
                    case SET_TIME:
                        btn_setTime.setEnabled(false);
                        btn_setDate.setEnabled(true);
                        viewSwitcher.showPrevious();
                        break;
        
                    case SET:
                        if (iCustomDateTimeListener != null) {
                            int month = datePicker.getMonth();
                            int year = datePicker.getYear();
                            int day = datePicker.getDayOfMonth();
        
        
                            calendar_date.set(year, month, day, selectedHour,
                                    selectedMinute);
        
                            iCustomDateTimeListener.onSet(dialog, calendar_date,
                                    calendar_date.getTime(), calendar_date
                                            .get(Calendar.YEAR),
                                    getMonthFullName(calendar_date.get(Calendar.MONTH)),
                                    getMonthShortName(calendar_date.get(Calendar.MONTH)),
                                    calendar_date.get(Calendar.MONTH), calendar_date
                                            .get(Calendar.DAY_OF_MONTH),
                                    getWeekDayFullName(calendar_date
                                            .get(Calendar.DAY_OF_WEEK)),
                                    getWeekDayShortName(calendar_date
                                            .get(Calendar.DAY_OF_WEEK)), calendar_date
                                            .get(Calendar.HOUR_OF_DAY),
                                    getHourIn12Format(calendar_date
                                            .get(Calendar.HOUR_OF_DAY)), calendar_date
                                            .get(Calendar.MINUTE), calendar_date
                                            .get(Calendar.SECOND), getAMPM(calendar_date));
                        }
                        if (dialog.isShowing() && isAutoDismiss)
                            dialog.dismiss();
                        break;
        
                    case CANCEL:
                        if (iCustomDateTimeListener != null)
                            iCustomDateTimeListener.onCancel();
                        if (dialog.isShowing())
                            dialog.dismiss();
                        break;
                }
            }
        
            /**
             * @param date
             *            date in String
             * @param fromFormat
             *            format of your <b>date</b> eg: if your date is 2011-07-07
             *            09:09:09 then your format will be <b>yyyy-MM-dd hh:mm:ss</b>
             * @param toFormat
             *            format to which you want to convert your <b>date</b> eg: if
             *            required format is 31 July 2011 then the toFormat should be
             *            <b>d MMMM yyyy</b>
             * @return formatted date
             */
            public static String convertDate(String date, String fromFormat,
                                             String toFormat) {
                try {
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat(fromFormat);
                    Date d = simpleDateFormat.parse(date);
                    Calendar calendar = Calendar.getInstance();
                    calendar.setTime(d);
        
                    simpleDateFormat = new SimpleDateFormat(toFormat);
                    simpleDateFormat.setCalendar(calendar);
                    date = simpleDateFormat.format(calendar.getTime());
        
                } catch (Exception e) {
                    e.printStackTrace();
                }
        
                return date;
            }
        
            private String getMonthFullName(int monthNumber) {
                Calendar calendar = Calendar.getInstance();
                calendar.set(Calendar.MONTH, monthNumber);
        
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMMM");
                simpleDateFormat.setCalendar(calendar);
                String monthName = simpleDateFormat.format(calendar.getTime());
        
                return monthName;
            }
        
            private String getMonthShortName(int monthNumber) {
                Calendar calendar = Calendar.getInstance();
                calendar.set(Calendar.MONTH, monthNumber);
        
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMM");
                simpleDateFormat.setCalendar(calendar);
                String monthName = simpleDateFormat.format(calendar.getTime());
        
                return monthName;
            }
        
            private String getWeekDayFullName(int weekDayNumber) {
                Calendar calendar = Calendar.getInstance();
                calendar.set(Calendar.DAY_OF_WEEK, weekDayNumber);
        
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEEE");
                simpleDateFormat.setCalendar(calendar);
                String weekName = simpleDateFormat.format(calendar.getTime());
        
                return weekName;
            }
        
            private String getWeekDayShortName(int weekDayNumber) {
                Calendar calendar = Calendar.getInstance();
                calendar.set(Calendar.DAY_OF_WEEK, weekDayNumber);
        
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EE");
                simpleDateFormat.setCalendar(calendar);
                String weekName = simpleDateFormat.format(calendar.getTime());
        
                return weekName;
            }
        
            private int getHourIn12Format(int hour24) {
                int hourIn12Format = 0;
        
                if (hour24 == 0)
                    hourIn12Format = 12;
                else if (hour24 <= 12)
                    hourIn12Format = hour24;
                else
                    hourIn12Format = hour24 - 12;
        
                return hourIn12Format;
            }
        
            private String getAMPM(Calendar calendar) {
                String ampm = (calendar.get(Calendar.AM_PM) == (Calendar.AM)) ? "AM"
                        : "PM";
                return ampm;
            }
        
            private void resetData() {
                calendar_date = null;
                is24HourView = true;
            }
        
            public static String pad(int integerToPad) {
                if (integerToPad >= 10 || integerToPad < 0)
                    return String.valueOf(integerToPad);
                else
                    return "0" + String.valueOf(integerToPad);
            }
        }
        

        在您的活动中:

        MainActivity.java:

        public class MainActivity extends Activity{
        
             CustomDateTimePicker custom;
        Button btnEventDateTime;
                @Override
                protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
            btnEventDateTime = ((Button) findViewById(R.id.btnEventDateTime));
            custom = new CustomDateTimePicker(this,
                            new CustomDateTimePicker.ICustomDateTimeListener() {
        
                                @Override
                                public void onSet(Dialog dialog, Calendar calendarSelected,
                                                  Date dateSelected, int year, String monthFullName,
                                                  String monthShortName, int monthNumber, int date,
                                                  String weekDayFullName, String weekDayShortName,
                                                  int hour24, int hour12, int min, int sec,
                                                  String AM_PM) {
            //                        ((TextInputEditText) findViewById(R.id.edtEventDateTime))
                                    edtEventDateTime.setText("");
                                    edtEventDateTime.setText(year
                                            + "-" + (monthNumber + 1) + "-" + calendarSelected.get(Calendar.DAY_OF_MONTH)
                                            + " " + hour24 + ":" + min
                                            + ":" + sec);
                                }
        
                                @Override
                                public void onCancel() {
        
                                }
                            });
                    /**
                     * Pass Directly current time format it will return AM and PM if you set
                     * false
                     */
                    custom.set24HourFormat(true);
                    /**
                     * Pass Directly current data and time to show when it pop up
                     */
                    custom.setDate(Calendar.getInstance());
                    btnEventDateTime.setOnClickListener(
                            new View.OnClickListener() {
        
                                @Override
                                public void onClick(View v) {
                                    custom.showDialog();
                                }
                            });
            }
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-05-19
          • 2021-09-26
          • 2013-09-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多