代码
String strDate = "2010-12-01";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
Date parsedDate = sdf.parse(strDate);
System.out.println(parsedDate);
将依赖您的语言环境生成以下输出:
Fri Jan 01 00:12:00 CET 2010
日期没有正确解析,因为我期待的是1月12日而不是1月1日。 我知道,月份从0到11编号,所以12月份变成了0月。
我有几种解决方案可以解决这个问题,但是所有这些解决方案都会产生至少3-4行代码。所以我的问题是:
解决这个“问题”最好的方法是什么?
我无法想象解析一个简单的日期需要超过2-3行......
//编辑:对我这个问题感到羞耻。原谅我。 thx伙计
答案 0 :(得分:9)
将yyyy-mm-dd
更改为yyyy-MM-dd
M Month in year Month July; Jul; 07
m Minute in hour Number 30
参见
答案 1 :(得分:5)
您的日期格式不正确:月份为MM
(不是mm
,这是几分钟)。试试这个:
"yyyy-MM-dd"
你获得1月份的原因是你没有给解析器一个月(你给了年 - 分钟)。 1月,即第一个月,如果输入未提供,则为分配给日期的默认月份。 12
被解析为分钟字段(相当明显)
答案 2 :(得分:0)
解决这个问题最好的方法是什么"?
使用不同的课程。您正在使用麻烦的旧遗留类。而是使用java.time类。
LocalDate
LocalDate
类表示没有时间且没有时区的仅限日期的值。它明智地计算数月,1-12是1月到12月。
您的输入字符串已采用ISO 8601格式之一。默认情况下,这些标准格式在java.time类中使用。所以不需要定义格式化模式。
LocalDate localDate = LocalDate.parse( "2010-12-01" );
Month
另请查看方便的Month
枚举。
Month month = Month.of( 1 ); // January = 1, December = 12.