我在解析日期时遇到异常。
以下是代码:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-DD");
Date d = format.parse("2014/02/20");
System.out.println(d);
您不仅弄错了斜杠/破折号,还使用了
DD
(一年中的某一天)而不是 dd
(一月中的某一天)。你想要:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
一如既往,阅读文档以准确了解模式符号的含义 - 如果您发现其行为奇怪,请非常仔细地根据数据检查模式。
我也推荐:
java.time
(Java 8);
java.util.Date/Calendar
API 太糟糕了
绝对很重要;如果您只想将其视为日期(没有时间),那么可能值得指定 UTC - 这样就可以轻松与其他任何内容进行互操作,并且您可以在底层毫秒表示中的明显位置获得日边界。
Date d = format.parse("2014-02-20");
或
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
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 ) ;