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

时间:2019-04-08 15:12:48

标签: java android date-formatting android-datepicker android-date

我目前正在创建自定义日期格式,以使其显示为“ 2019年4月8日,星期一” 但是只要我从对话框中选取并应用简单的日期格式,它就会返回带有缩写的月份和时间的日期(我不需要)。知道如何更新代码以使其以上述格式工作吗? 这是我的代码:

@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());
    }

2 个答案:

答案 0 :(得分:1)

要实现这种格式: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()));
}

答案 1 :(得分:0)

java.time和ThreeTenABP

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

2019年4月8日,星期一

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

我正在使用java.time(现代Java日期和时间API)。您尝试使用的日期/时间分类SimpleDateFormatDate早已过时且设计欠佳,尤其是前者特别麻烦,因此我不想使用它们。

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

是的,java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6

  • 在Java 8和更高版本以及更新的Android设备(API级别26以上)中,内置了现代API。
  • 在Java 6和7中,获得了ThreeTen反向端口,这是现代类的反向端口(JSR 310的ThreeTen;请参见底部的链接)。
  • 在(较旧的)Android上,使用Android版本的ThreeTen Backport。叫做ThreeTenABP。并确保您使用子包从org.threeten.bp导入日期和时间类。

您的代码出了什么问题?

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

链接