首页 > 解决方案 > 无法解析的日期异常java日期模式

问题描述

我在尝试使用这种格式解析日期时遇到错误:

2001 年 3 月 26 日 2001 年 8 月 15 日

我正在使用下一个代码:

    private void parseDate(String firstDate) {
        Date fDate = null;
        try {
            fDate = new SimpleDateFormat("dd-MMM-yyyy").parse(firstDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

但我收到错误消息:无法解析的日期:“2001 年 8 月 15 日”。我不太确定我必须使用什么日期格式。

谢谢

标签: javadateparsing

解决方案


tl;博士

LocalDate
.parse(
    "15-August-2001" , 
    DateTimeFormatter.ofPattern( "dd-MMMM-uuuu" , Locale.US )
)
.toString()

提示:最好仅使用标准ISO 8601格式以文本方式交换日期时间数据。

java.time

Deadpool的答案虽然在技术上是正确的,但已经过时了。现代方法使用java.time类,通过采用 JSR 310 取代了传统的日期时间类。

LocalDate

该类LocalDate表示没有时间、没有时区从 UTC 偏移的仅日期值。

DateTimeFormatter

使用 定义自定义格式模式DateTimeFormatter.ofPattern。格式化代码与遗留类并不完全相同SimpleDateFormat,因此请务必仔细研究 Javadoc。

指定 aLocale以确定用于翻译月份名称的人类语言。

String input = "15-August-2001" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MMMM-uuuu" , Locale.US ) ;
LocalDate ld = LocalDate.parse( input , f ) ;

System.out.println( "ld.toString(): " + ld ) ;

请参阅在 IdeOne.com 上实时运行的代码

ld.toString(): 2001-08-15

Java 中的日期时间类型表,包括现代和传统。


推荐阅读