我需要使用日期模式“yyyy-MM-dd”解析输入字符串中的日期,如果日期将以任何其他格式出现,则抛出错误。
这是我解析日期的代码:
private void validateDate() throws MyException {
Date parsedDate;
String DATE_FORMAT = "yyyy-MM-dd";
try{
parsedDate = new SimpleDateFormat(DATE_FORMAT).parse(getMyDate());
System.out.println(parsedDate);
} catch (ParseException e) {
throw new MyException(“Error occurred while processing date:” + getMyDate());
}
}
当我在myDate输入“2011-06-12”这样的字符串时,我会得到输出“Thu Sep 29 00:00:00 EEST 2011”,这很好。
当我发送了一个不正确的字符串,如“2011-0612”时,我收到了错误的预期。
当我尝试传递仍然有两个“连字符”但字符数错误的字符串时,问题就开始了。 例如:
输入字符串“2011-06-1211” 结果“Tue Sep 23 00:00:00 EEST 2014”。
输入字符串“2011-1106-12” 结果“Mon Feb 12 00:00:00 EET 2103”。
我无法更改字符串日期的输入格式。
我怎能避免它?
答案 0 :(得分:10)
您是否尝试过调用setLenient(false)
上的SimpleDateFormat
?
import java.util.*;
import java.text.*;
public class Test {
public static void main(String[] args) throws Exception {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
format.setLenient(false);
Date date = format.parse("2011-06-1211"); // Throws...
System.out.println(date);
}
}
请注意,我还建议您设置SimpleDateFormat
的时区和区域设置。 (或者,使用Joda Time代替......)
答案 1 :(得分:0)
同一问题,我注意到当我直接在main方法中使用此代码时,它返回正确的日期,而当我通过单独的方法使用相同的代码时,它返回不正确的日期
String string = "03/01/2015";
DateFormat format = new SimpleDateFormat("MM/dd/yyyy", Locale.ENGLISH);
Date date1 = format.parse(string);
System.out.println(new SimpleDateFormat("dd/MM/yyyy").format(date));
函数中返回错误日期的代码
public Date isValidDate(String dateToValidate, String dateFormat){
if(dateToValidate == null){
return null;
}
DateFormat format = new SimpleDateFormat(dateFormat,Locale.ENGLISH);
//format.setLenient(false);
Date date;
try {
date = format.parse(dateToValidate);
} catch (ParseException e) {
e.printStackTrace();
return null;
}
return date;
}