Android日期选择器显示不正确的格式



我在这里找不到正确的格式。我正试图从我的android日期选择器中获得一个适当的日期,以推入日期对象。

我的代码

final android.icu.util.Calendar cldr = android.icu.util.Calendar.getInstance();
int day = cldr.get(android.icu.util.Calendar.DAY_OF_MONTH);
int month = cldr.get(android.icu.util.Calendar.MONTH);
int year = cldr.get(android.icu.util.Calendar.YEAR);
picker = new DatePickerDialog(getContext(),
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
txtDate.setText(dayOfMonth + "-" + (monthOfYear + 1) + "-" + year);
}
}, year, month, day);
picker.show();

结果为16-08-21(d-mm-yy)但我需要16-Aug-21 (dd-mmm-yy)

你能帮我一下吗?

将日期字符串解析为日期对象,然后格式化为dd- mm -yy

String dateString = "16-08-21";
Date parsedDate = SimpleDateFormat("dd-MM-yy").parse(dateString);
String formattedDateString = SimpleDateFormat("dd-MMM-yy").format(parsedDate);
Log.d("mridx", "onCreate:" +parsedDate);
Log.d("mridx", "onCreate:" + formattedDateString);

日志D/mridx: onCreate: Mon Aug 16 00:00:00 GMT+05:30 2021

D/mridx: onCreate: 16-Aug-21

java.time

你把你的问题标记为Java -8,所以我想你想要Java 8的解决方案。使用java。time, Java 8中引入的现代Java日期和时间API,用于您的日期工作。

不幸的是,您的日期选择器使用月数0到11作为过时的Calendar类的余数。因此,在我们的代码中,我们需要添加1。

int year = 2021;
int monthOfYear = Calendar.AUGUST; // Don’t use Calendar in your code; for demonstration only
int dayOfMonth = 16;

LocalDate date = LocalDate.of(year, monthOfYear + 1, dayOfMonth);
String dateString = date.format(DATE_FORMATTER);
System.out.println(dateString);

我已经使用了这个静态格式化器:

private static final DateTimeFormatter DATE_FORMATTER
= DateTimeFormatter.ofPattern("dd-MMM-yy", Locale.ENGLISH);

这个片段的输出是:

16-Aug-21

问题:不java。何时需要Android API级别26?

java。time在新旧Android设备上都能很好地运行。它只需要至少Java 6.

  • 在Java 8和更高版本以及较新的Android设备(从API级别26开始),现代API是内置的。
  • 在非android Java 6和7中获得ThreeTen Backport,现代类的后端口(JSR 310的ThreeTen;参见底部的链接)。
  • 在旧的Android上使用desugaring或Android版的ThreeTen Backport。它被称为ThreeTenABP。在后一种情况下,确保从org.threeten.bp和子包中导入日期和时间类。

链接
  • Oracle教程:日期时间说明如何使用java.time.
  • Java规范请求(JSR) 310,java.time首次被描述。
  • ThreeTen Backport项目,java.time的Backport到Java 6和7 (ThreeTen for JSR-310)。
  • Java 8+ api
  • ThreeTenABP, Android版的ThreeTen Backport
  • 问题:如何在Android项目中使用ThreeTenABP,有一个非常彻底的解释。

最新更新