繁体   English   中英

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

[英]Android date picker showing incorrect format

我在这里无法获得正确的格式。 我正在尝试从我的 android 日期选择器中获取正确的日期,以将其推入日期 object。

我的代码

                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)

你能帮我解决这个问题吗?

将日期字符串解析为日期 object,然后格式化为 dd-MMM-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:2021 年 8 月 16 日星期一 00:00:00 GMT+05:30

D/mridx:onCreate:21 年 8 月 16 日

java.时间

您将问题标记为 java-8,所以我想您需要 Java 8 解决方案。 使用 java.time,现代 Java 日期和时间 API 在 Java 8,为您的日期工作。

不幸的是,您的日期选择器使用从 0 到 11 的月份数字作为过时Calendar class 的余数。因此在我们的代码中我们需要加 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);

我用过这个 static 格式化程序:

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

此代码段中的 Output 是:

21 年 8 月 16 日

问题:java.time 不需要 Android API 26 级吗?

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

  • 在 Java 8 及更高版本以及更新的 Android 设备(从 API 级别 26)中,现代 API 是内置的。
  • 在非 Android Java 6 和 7 中获取 ThreeTen Backport,现代类的 backport(ThreeTen 用于 JSR 310;请参阅底部的链接)。
  • 在较旧的 Android 上使用脱糖或 ThreeTen Backport 的 Android 版本。 它叫做 ThreeTenABP。 在后一种情况下,请确保使用子包从org.threeten.bp导入日期和时间类。

链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM