那就在转回成字符串。看看一样了不?
这是我曾经写过的一个验证器的代码:public class IsDateValidator extends Validator{
public IsDateValidator(Validator validator) {
super(validator);
} public IsDateValidator(String value) {
super(value);
} protected IsDateValidator() {
} public boolean validate() {
try {
value = value.replaceAll("-0+", "-");
Date date = FORMAT.parse(value);
String newDateStr = FORMAT.format(date);
return value.equals(newDateStr) && super.validate();
} catch (ParseException e) {
return false;
}
} private static final SimpleDateFormat FORMAT = new SimpleDateFormat("yyyy-M-d");
}
这是我曾经写过的一个验证器的代码:public class IsDateValidator extends Validator{
public IsDateValidator(Validator validator) {
super(validator);
} public IsDateValidator(String value) {
super(value);
} protected IsDateValidator() {
} public boolean validate() {
try {
value = value.replaceAll("-0+", "-");
Date date = FORMAT.parse(value);
String newDateStr = FORMAT.format(date);
return value.equals(newDateStr) && super.validate();
} catch (ParseException e) {
return false;
}
} private static final SimpleDateFormat FORMAT = new SimpleDateFormat("yyyy-M-d");
}
运行环境:jdk1.4,编译标准:1.3谢谢dext的回答。
我刚才按照你的提示,将日期再转为字符串比较了下。
运行环境:jdk1.5,编译标准:1.5
在这个环境下,程序一:严格遵守该格式的情况
String l_strDate = "2006060A";
SimpleDateFormat l_sdf = new SimpleDateFormat("yyyyMMdd");
l_sdf.setLenient(false);//设置严格遵守该格式转型
Date l_dat = l_sdf.parse(l_strDate);
String l_str = l_sdf.format(l_date);
System.out.println(l_strDate.equals(l_str) + " l_str = " + l_str);
结果:
java.text.ParseException: Unparseable date: "2006060A"
at java.text.DateFormat.parse(DateFormat.java:335)
at package1.Main.testDateFormat(Main.java:34)
at package1.Main.main(Main.java:13)程序二:不严格遵守该格式转型的情况
String l_strDate = "2006060A";
SimpleDateFormat l_sdf = new SimpleDateFormat("yyyyMMdd");
l_sdf.setLenient(false);//设置可以不严格遵守该格式转型
Date l_dat = l_sdf.parse(l_strDate);
String l_str = l_sdf.format(l_date);
System.out.println(l_strDate.equals(l_str) + " l_str = " + l_str);
结果:
NO l_str = 20060531在1.5的环境下看起来貌似是正常执行了。
那么请问:
在1.4的环境下,SimpleDateFormat的parse方法能将“2006060A”正常转型,是不是1.4的一个bug???
程序二的 l_sdf.setLenient(false); 写错了。
应该是l_sdf.setLenient(true);