我的布局包含两个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;然后可以作为日期时间戳写入我的数据库。将两个选择器的输出组合成单个时间戳的最佳方法是什么?
答案 0 :(得分:1)
在活动/片段中保留一个Calendar变量,当设置时间/日期时,只需使用.set(int field,int value)函数设置年/月/日/小时/分钟。
这将为您提供1个永远更新的日历实例,您可以根据需要进行格式化,例如将其显示为&#34; 7月27日,4:30 PM&#34;。