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

问题描述 投票:-1回答:2

我目前正在创建一个自定义日期格式,它应该显示为“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());
    }
java android date-formatting android-datepicker android-date
2个回答
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()));
}

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 Backport,现代类的后端(JST 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只是一个时间点,它不能有格式。

链接

© www.soinside.com 2019 - 2024. All rights reserved.