Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将日期字符串转换为自定义日期格式?_Java_Android_Date Formatting_Android Datepicker_Android Date - Fatal编程技术网

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

Java 如何将日期字符串转换为自定义日期格式?,java,android,date-formatting,android-datepicker,android-date,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 = (++mo

我目前正在创建一个自定义日期格式,以便显示为“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());
    }

要实现这种格式:
2019年4月8日,星期一
您必须将日期格式化如下:

祝你好运


我会这样做:

@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 2019年4月8日,星期一

不用费心通过格式模式字符串定义自己的日期格式。所需的格式已内置

我正在使用java.time,这是现代的java日期和时间API。您尝试使用的日期/时间类别,
SimpleDateFormat
date
,早已过时且设计拙劣,其中前者特别麻烦,因此我不想使用它们

问题:我可以在Android上使用java.time吗? 是的,java.time在较旧和较新的Android设备上运行良好。它至少需要Java6

  • 在Java8和更高版本以及更新的Android设备上(API级别26),现代API是内置的
  • 在Java6和Java7中,获取三个后端口,即现代类的后端口(三个十用于JSR310;参见底部的链接)
  • 在(较旧的)Android上使用Android版本的ThreeTen Backport。它叫ThreeTenABP。并确保从带有子包的
    org.threeten.bp
    导入日期和时间类
你的代码出了什么问题?
  • 首先,您正在将传入的
    year
    monthOfYear
    dayOfMonth
    组合成一个您试图解析的字符串,这是一个迂回的过程,但更糟糕的是,该字符串没有格式
    E MMM dd yyyy
    ,因此使用
    SimpleDateFormat
    解析它可能失败。如果您没有在
    e.printStackTrace()中看到stacktrace,我建议您的项目设置中有一个严重的问题,您应该在编写另一行代码之前解决这个问题。如果您没有看到代码中发生的错误,那么您就是蒙着眼睛编码。分析错误导致显示从
    new date()
    获取的当前日期
  • convertedDate.toString()
    返回一个字符串,格式为
    EEE-MMM-dd-HH:mm:ss-zzz-yyyy
    。例如,2019年4月9日星期二09:39:47美国东部夏令时<代码>日期。toString
    始终返回此格式。它与解析日期的格式无关(即使已成功解析),因为
    date
    只是一个时间点,它不能包含格式
链接
  • 解释如何使用java.time
  • ,其中首先描述了
    java.time
  • ,java.time的后端口到Java6和Java7(JSR-310为三十)
  • ,Android版Three Ten Backport
  • ,解释得非常透彻

这似乎不起作用,在我的代码中,我只是将行替换为您建议的“SimpleDateFormat mDateFormat=new SimpleDateFormat(“EEEE,MMMMM dd,yyyy”);”但它在某种意义上打破了它,它只显示今天的日期,而不是选择的日期。另外,mydate settext需要一个字符串,因此mydate.settext(mDateFormat.format(convertedDate))会崩溃;有什么想法可能是错误的吗?我使用了你的方法,它与E/AndroidRuntime崩溃了:致命异常:主进程:com.myapp,PID:28523 java.lang.IllegalArgumentException:无法在java.text.DateFormat.format(DateFormat.java:306)在java.text.format.format(format.java:157)将给定对象格式化为日期在myDate行的com.ui.registervisitor.RegisterVisitorFragment.onDateSet上,上面的onDateSet函数代码出现了一些奇怪的情况。它显示了正确的格式和正确的日期和年份,但显示了错误的星期几(EEEE)和错误的月份(MMMM)。它实际上显示了月份的五月,即使我选择了四月,也显示了星期六是周二。实际上,上面的代码缺少一行:mDateFormat.parse(date);那就完美了!谢谢此外,我用来让它工作的SimuleDeaFrimeType是:“EE,MMMM D,YYYY”,我个人喜欢用自己的月份创建自己的自定义日期,或者缩写或不创建GeMththFrimTutt(DayOF月),作为一个考虑,抛开长期过时和臭名昭著的麻烦<代码> SimpleDateFormat < /代码>和朋友,并添加到Android项目中,以便使用现代java日期和时间API
java.time
。和它一起工作真是太好了。可能的复制品或可能的复制品
@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()));
}
    DateTimeFormatter dateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL)
            .withLocale(Locale.US);
    LocalDate date = LocalDate.of(year, ++monthOfYear, dayOfMonth);
    String formattedDate = date.format(dateFormatter);