Android从单独的时间和日期选择器小部件

时间:2015-07-29 00:53:30

标签: android datetime android-datepicker

我的布局包含两个EditText字段,一个用于日期,另一个用于一段时间。点击两次后,每个都会启动其各自的自动收报机。

<EditText
        android:id="@+id/task_due_date"
        android:inputType="datetime"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:drawableStart="@drawable/ic_insert_invitation_black_18dp"
        android:layout_below="@+id/task_title"
        android:onClick="showDatePickerDialog"
        android:hint="@string/date_due_hint"/>

    <EditText
        android:id="@+id/time_due"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/task_due_date"
        android:onClick="showTimePickerDialog"
        android:hint="@string/time_due_hint"/>

在我的Activity类中,有两种方法可以启动Dialog片段。

public void showDatePickerDialog(View v) {
        DialogFragment newFragment = new DatePickerFragment();
        newFragment.show(getFragmentManager(), "datePicker");
    }

public void showTimePickerDialog(View v) {
        TimePickerFragment newFragment = new TimePickerFragment();
        newFragment.show(getFragmentManager(), "timePicker");
    }

不幸的是,现在我不知道如何从两个单独的选择器创建单个日期时间戳。我目前的解决方案是

@Override
    public void onDateSet(DatePicker view, int year, int month, int day) {

        String myFormat = "MM/dd/yy";
        SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
        Calendar calendar = Calendar.getInstance();
        calendar.set(year, month, day);
        ((EditText) findViewById(R.id.task_due_date)).setText(sdf.format(calendar.getTime()));
    }

@Override
    public void onTimeSet(TimePicker view, int hour, int minute) {
        String format = "HH:ss";
        SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.US);
        Calendar calendar = Calendar.getInstance();
        calendar.set(hour, minute);
        String date = ((EditText) findViewById(R.id.task_due_date)).getText().toString();
        ((EditText) findViewById(R.id.task_due_date)).setText(date + " " + sdf.format(calendar.getTime()));
    }

onTimeSet的最后两行是我被困的地方。目前的方式很糟糕,并没有创建一个合适的时间戳,它目前看起来像7/27/15 13:30。理想情况下,我想删除&#34; time_due&#34; EditText字段全部在一起,并找到一种方法来填充task_due_date EditText,其内容类似于:&#34; 7月27日,4:30 PM&#34;然后可以作为日期时间戳写入我的数据库。将两个选择器的输出组合成单个时间戳的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

在活动/片段中保留一个Calendar变量,当设置时间/日期时,只需使用.set(int field,int value)函数设置年/月/日/小时/分钟。

这将为您提供1个永远更新的日历实例,您可以根据需要进行格式化,例如将其显示为&#34; 7月27日,4:30 PM&#34;。