以下内容仅做记录。
import java.text.ParseException;
public class TestFormat {
/**
* 是否有效的日期
*
* @param dateStr
* @param pattern
* @return
*/
public static boolean isValidDate(String dateStr, String pattern) {
java.text.SimpleDateFormat df = new java.text.SimpleDateFormat(pattern);
try {
df.setLenient(false);
df.parse(dateStr);
return true;
} catch (ParseException e) {
return false;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
// System.out.println("19810331 is valid? " + isValidDate("19810331", "yyyyMMdd"));
// System.out.println("19810332 is valid? " + isValidDate("19810332", "yyyyMMdd"));
System.out.println("12112200004 is valid? " + isValidDate("12112200004", "MMddHHmmss"));
System.out.println("1020130003 is valid? " + isValidDate("1020130003", "MMddHHmmss"));
}
}
这里的问题好奇怪,
System.out.println("12112200004 is valid? " + isValidDate("12112200004", "MMddHHmmss")); 这句话竟然返回TRUE。。。
没想明白,暂时只做记录。
关于如何判断一个字符串是否是给定格式的日期,现在用以下方式判断:
public static ThreadLocal<DateFormat> dateFormatThreadLocal = new ThreadLocal<DateFormat>(){
protected DateFormat initialValue() {
return new SimpleDateFormat("MMddHHmmss");
}
};
/**
* Method Name: isValidDate <br>
* Description: 检查日期格式是否正确 <br>
* @param value 传入的日期字符串
* @param errMsg 传入的错误信息
* @return
* @since JDK 1.6
*/
public static void isValidDate(String value ,String errMsg) throws AppBizException{
if (!StringUtil.isBlank(value)) {
try {
Date date = dateFormatThreadLocal.get().parse(value);
if (!value.equals(dateFormatThreadLocal.get().format(date))) {
throw new AppBizException(SdkAppExcCodes.VALIDATE_ERR_INVALID_FORMAT, errMsg);
}
} catch (ParseException e) {
throw new AppBizException(SdkAppExcCodes.VALIDATE_ERR_INVALID_FORMAT, errMsg);
}
}
}
因为需要考虑多线程的同步问题,所以用了threadlocal。