不可解析的日期异常Java日期模式

时间:2019-07-31 16:23:40

标签: java date parsing

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

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

但是我收到错误消息:无法解析的日期:“ 15-August-2001”。我不太确定我必须使用哪种日期格式。

谢谢

2 个答案:

答案 0 :(得分:2)

tl; dr

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

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

java.time

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

LocalDate

LocalDate类表示没有日期,没有time zoneoffset-from-UTC的仅日期值。

DateTimeFormatter

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

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

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 ) ;

请参阅此code run live at IdeOne.com

  

ld.toString():2001-08-15

Table of date-time types in Java, both modern and legacy.

答案 1 :(得分:0)

使用Locale.US,以便考虑美国格式的月份名称

SimpleDateFormat("dd-MMM-yyyy",Locale.US)

请参阅此code run live at IdeOne.com