【发布时间】:2012-04-11 00:24:44
【问题描述】:
我需要将字符串解析为“yyyy”格式的年份。我使用的代码 sn-p 是
try{
String strDate = "200323";
SimpleDateFormat formatter = new SimpleDateFormat("yyyy");
Date dateStr = formatter.parse(strDate);
System.out.println("The year is " + dateStr);
}
catch(Exception e){
System.out.println("Date parse exception");
}
问题是,如果我使用 4 位数的字符串,例如“2003”,它会解析为年份,并且输出如预期的那样“年份是 Wed Jan 01 00:00:00 GMT 2003”。但是当我们在上面的 sn-p 中给出一个超过 4 位的无效字符串时,比如“200323”,它不会抛出解析异常,而是接受字符串值,输出显示为“年份是星期一格林威治标准时间 200323 年 1 月 1 日 00:00:00”。任何人都可以提出一个解决方案来解决这个问题或至少让它抛出解析异常吗?我什至在解析之前尝试了formatter.setLenient(false),但它没有显示任何效果。任何帮助表示赞赏。提前致谢。
【问题讨论】:
-
为什么不只传递字符串的前 4 个字符?或者如果长度超过 4 则抛出 java.text.ParseException()
-
200323是有效年份。如果字符串超过 4 位,您可以截断该字符串。 -
我认为问题在于让“格式化程序”计算出年份。对于您的情况,您必须解决找出“有效年份”通过什么的问题。哪些情况可能会破坏这一点(无效的年份字符串)?然后你可以清理它们并将它们传递给格式化
标签: java date simpledateformat