如何将日期字符串转换为自定义日期格式?

How do I convert my date string to a custom date format?

我目前正在创建一个自定义日期格式,它应该显示为 "Monday, April 8, 2019 " 但是每当我从对话框中选择并应用简单的日期格式时,它 returns 带有缩写月份和时间的日期(我不需要)。知道如何更新我的代码以使其以上述格式工作吗? 这是我的代码:

@Override
    public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {

        String date = (++monthOfYear)+" "+dayOfMonth+", "+year;
        SimpleDateFormat dateFormat = new SimpleDateFormat("E MMM dd yyyy");
        dateFormat.format(new Date());
        Date convertedDate = new Date();
        try {
            convertedDate = dateFormat.parse(date);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        myDate.setText(convertedDate.toString());
    }

要实现这样的格式:Monday, April 8, 2019 你必须像这样格式化日期 (source):

SimpleDateFormat mDateFormat = new SimpleDateFormat("EEEE, MMMMM dd, yyyy");
myDate.setText(mDateFormat.format(convertedDate));

祝你好运


我会这样做:

@Override
public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {
    Calendar mDate = Calendar.getInstance();
    mDate.set(year, monthOfYear, dayOfMonth);
    SimpleDateFormat mDateFormat = new SimpleDateFormat("EEEE, MMMMM dd, yyyy");
    myDate.setText(mDateFormat.format(mDate.getTime()));
}

java.time 和 ThreeTenABP

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL)
            .withLocale(Locale.US);
    LocalDate date = LocalDate.of(year, ++monthOfYear, dayOfMonth);
    String formattedDate = date.format(dateFormatter);

Monday, April 8, 2019

不必费心通过格式模式字符串定义您自己的日期格式。您想要的格式已经内置。

我正在使用 java.time,现代 Java 日期和时间 API。您尝试使用的 date/time 类,SimpleDateFormatDate,早已过时且设计不佳,前者尤其出了名的麻烦,所以我不想使用它们。

问题:我可以在 Android 上使用 java.time 吗?

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

  • 在 Java 8 和更新的 Android 设备上(从 API 级别 26)内置了现代 API。
  • 在 Java 6 和 7 中获取现代 类 的 ThreeTen Backport(ThreeTen 用于 JSR 310;请参阅底部的链接)。
  • 在(较旧的)Android 使用 ThreeTen Backport 的 Android 版本。它叫做 ThreeTenABP。并确保使用子包从 org.threeten.bp 导入日期和时间 类。

你的代码出了什么问题?

  • 首先,您将传入的 yearmonthOfYeardayOfMonth 组装成一个您要解析的字符串,这是迂回的,但更糟糕的是,该字符串还没有没有格式 E MMM dd yyyy,所以用你的 SimpleDateFormat 解析它可能失败了。如果你还没有看到 e.printStackTrace(); 的堆栈跟踪,我建议你在你的项目设置中遇到了一个严重的问题,你应该在编写另一行代码之前解决这个问题。如果您没有看到代码中发生的错误,那么您就是在蒙着眼睛进行编码。解析错误导致显示从 new Date() 获得的当前日期。
  • convertedDate.toString() returns 要显示的 EEE MMM dd HH:mm:ss zzz yyyy 格式的字符串。例如 Tue Apr 09 09:39:47 EDT 2019Date.toString 总是 returns 这种格式。它与解析日期的格式无关(即使已成功解析),因为 Date 只是一个时间点,它不能包含格式。

链接