2009-06-22 回答
import java.util.*;
import java.text.*;
/** 临时写的 希望有所帮助 */
public class DateUtils {
public static void main(String[] s){
//以下是测试代码
Date date1 = DateUtils.parse("2009-10-9 14:20:30", DateUtils.DEFAULT_DATETIME_PATTERN);
Date date2 = DateUtils.parse("2009-10-10 14:20:30", DateUtils.DEFAULT_DATETIME_PATTERN);
Date date3 = DateUtils.parse("2009-10-11 14:20:30", DateUtils.DEFAULT_DATETIME_PATTERN);
Date from = DateUtils.parse("2009-10-8 14:20:30", DateUtils.DEFAULT_DATETIME_PATTERN);
Date to = DateUtils.parse("2009-10-10 14:20:30", DateUtils.DEFAULT_DATETIME_PATTERN);
System.out.println(validate(date1, from, to));
System.out.println(validate(date2, from, to));
System.out.println(validate(date3, from, to));
}
public static final String DEFAULT_DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd";
public static final String DEFAULT_TIME_PATTERN = "hh:mm:ss";
/** String 转 Date 使用自定义的格式*/
public static Date parse(String dateString, String pattern){
DateFormat df = new SimpleDateFormat(pattern);
try{
return df.parse(dateString);
}catch(Exception e){
throw new RuntimeException(e);
}
}
/** 给定一个时间区间 [from, to] 如果日期date 在次区间内 则返回true */
public static boolean validate(Date date, Date from, Date to){
return date.equals(from) || date.equals(to) || date.before(to) && date.after(from);
}
}
补充:
import java.util.*;
import java.util.regex.*;
import java.text.*;
public class DateUtils2 {
public static boolean validate(String dateString){
//使用正则表达式 测试 字符 符合 dddd-dd-dd 的格式(d表示数字)
Pattern p = Pattern.compile("\\d{4}+[-]\\d{1,2}+[-]\\d{1,2}+");
Matcher m = p.matcher(dateString);
if(!m.matches()){return false;}
//得到年月日
String[] array = dateString.split("-");
int year = Integer.valueOf(array[0]);
int month = Integer.valueOf(array[1]);
int day = Integer.valueOf(array[2]);
if(month<1 || month>12){return false;}
int[] monthLengths = new int[]{0, 31, -1, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if(isLeapYear(year)){
monthLengths[2] = 29;
}else{
monthLengths[2] = 28;
}
int monthLength = monthLengths[month];
if(day<1 || day>monthLength){
return false;
}
return true;
}
/** 是否是闰年 */
public static boolean isLeapYear(int year){
return ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) ;
}
}
补充:
这是测试方法
public static void main(String[] s){
//以下是测试代码
System.out.println(validate("20099-1-1"));
System.out.println(validate("20099-100-1"));
System.out.println(validate("20099-1-100"));
System.out.println(validate("2009-1-1"));
System.out.println(validate("2009-1-31"));
System.out.println(validate("2009-2-28"));
System.out.println(validate("2009-2-29"));
System.out.println(validate("2008-2-29"));
}