java - 设置 Java.time datePicker
问题描述
我正在将我的应用程序从使用内置的公历切换到 Java.time,因为有人告诉我这是一种更好的方法。有没有办法像我在下面的代码中使用 java.time 那样做一个日期选择器?如果没有,是否有类似的东西?
private void buildDatePicker(){
final String myFormat = "MMM dd, yyyy"; //sets format in which to show date
final SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.getDefault());
Date c = calendar.getTime(); //gets the current date
String formattedDate = sdf.format(c); //runs date through formatter
etDate.setText(formattedDate); // sets the etDate edittext to the current date
final DatePickerDialog.OnDateSetListener datePicker = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, monthOfYear);
calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
etDate.setText(sdf.format(calendar.getTime()));
}
};
etDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new DatePickerDialog(getContext(), datePicker, calendar
.get(Calendar.YEAR), calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH)).show();
}
});
解决方案
您的代码既不完整也不一致。而且我不做Android,所以对具体的框架类不熟悉。所以我不能提供一个完整的例子。
但我可以显示一些粗略的代码翻译成使用java.time。
private void buildDatePicker ( )
{
// Automatically localize the format of the date string.
// Perhaps not make `formatter` object `final` as the user's locale might change during runtime.
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate( FormatStyle.MEDIUM ).withLocale( Locale.getDefault() );
etDate.setText( myLocalDate.format( formatter ) ); // sets the etDate edittext to the current date
final DatePickerDialog.OnDateSetListener datePicker = new DatePickerDialog.OnDateSetListener()
{
@Override
public void onDateSet ( DatePicker view , int year , int monthOfYear , int dayOfMonth )
{
LocalDate localDate = LocalDate.of( year , monthOfYear , dayOfMonth ); // Uses sane numbering for year and month, unlike the `Calendar`/`Date`.
etDate.setText( myLocalDate.format( formatter ) );
}
};
etDate.setOnClickListener( new View.OnClickListener()
{
@Override
public void onClick ( View v )
{
// TODO Auto-generated method stub
new DatePickerDialog( getContext() , datePicker , myLocalDate.getYear() , myLocalDate.getMonthValue() , myLocalDate.getDayOfMonth() )
.show();
}
} );
}
使用java.time比使用可怕的遗留类Calendar
、Date
、SimpleDateFormat
等简单得多。
这已经在 Stack Overflow 上讨论过很多次了。搜索以了解更多信息。
推荐阅读
- r - R中的Fisher Exact检验不提供优势比
- pandas - 标记空行,不包括空白行pyspark
- apache-spark - 如果文件大小大于 spark 中的驱动程序大小会怎样?
- .net-6.0 - 为什么升级到 .Net 6 会导致 HTTP 错误 500.31 - 无法加载 ASP.NET Core 运行时
- sql - 我应该如何编写 SQL 触发器来将一个月内的一些付款加起来?
- javascript - 为assetPath GaussianBlurBackgroundProcessor(Twilio)设置特定路径 - reactj
- javascript - lodash orderBy 多个数值字段显示优先级
- java - Gradle kotlin js 模块依赖于多平台模块
- python - 迭代列表的奇怪速度差异
- android-management-api - 通过google api explorer调用android管理api总是得到{“message”:“必需的路径参数父缺失。”,“JM”:true}