java.text.ParseException:无法解析的日期:“2014/02/20”

问题描述 投票:0回答:3

我在解析日期时遇到异常。

以下是代码:

    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-DD");
    Date d = format.parse("2014/02/20");
    System.out.println(d);
java
3个回答
3
投票

您不仅弄错了斜杠/破折号,还使用了

DD
(一年中的某一天)而不是
dd
(一月中的某一天)。你想要:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

一如既往,阅读文档以准确了解模式符号的含义 - 如果您发现其行为奇怪,请非常仔细地根据数据检查模式。

我也推荐:

    如果可以的话,使用
  • Joda Time(Java-8 之前的版本)或 java.time
    (Java 8); 
    java.util.Date/Calendar
     API 太糟糕了
  • 明确指定区域设置
  • 明确指定时区
当前您使用的是默认时区和区域设置。虽然在这种情况下区域设置可能并不重要(除非它用于选择日历系统;我无法立即记住),但我认为显式指定它会更清楚。时区

绝对很重要;如果您只想将其视为日期(没有时间),那么可能值得指定 UTC - 这样就可以轻松与其他任何内容进行互操作,并且您可以在底层毫秒表示中的明显位置获得日边界。


1
投票
您的日期格式与您的字符串不匹配。

Date d = format.parse("2014-02-20");

SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
    

0
投票

java.time

在现代 Java 中,使用

LocalDate

 类来表示仅日期值,没有时间,也没有时区或相对于 UTC 的偏移量。

/

 分隔符替换为 
-
,以符合 
ISO 8601 标准格式。

LocalDate ld = LocalDate.parse( "2014/02/20".replace( "/" , "-" ) ) ;
或者定义一个格式化程序。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu/MM/dd" ) ; LocalDate ld = LocalDate.parse( "2014/02/20" , f ) ;
    
© www.soinside.com 2019 - 2024. All rights reserved.