日期:2014-05-20  浏览次数:20795 次

关于解析时间字符串
本人有个方法:
public class T {
public boolean t(Date d,String s) {

时间格式:0 16 * * * (中间间隔一个空格)(从后往前分别代表:年 月 日 时 分)这个代表 每天的16点

还有个测试:
  public class TestT extends TestCase {
T t = new T();

public void testTFail() {
assertFalse(t.t(new Date(), "* 16"));
}

public void testTSuccess2() {
assertTrue(t.t(new Date(), "0 16"));
}

public void testTSuccess3() {
assertTrue(t.t(new Date(), "0 17 *"));
}

public void testTSuccess4() {
assertTrue(t.t(new Date(), "16 10 * *"));
}

这个只是部分情况,现在要求就是 我给定时间 跟当前时间比较 相等返回true 不等 返回flase 就是解析字符串跟当前时间比较,大侠们请指点

------解决方案--------------------
LZ是想要这样的方法吧
Java code
public boolean t(Date d, String s) {
    String[] sa = s.split(" "); //把格式化字符串分割
    Calendar c = Calendar.getInstance();
    c.setTime(d);
    int[] dt = new int[5]; //获取Date对象的年 月 日 时 分
    dt[0] = c.get(Calendar.MINUTE);
    dt[1] = c.get(Calendar.HOUR_OF_DAY);
    dt[2] = c.get(Calendar.DATE);
    dt[3] = c.get(Calendar.MONTH) + 1;
    dt[4] = c.get(Calendar.YEAR);
    boolean result = true;
    for (int i=0; i<dt.length && i<sa.length; i++) {
        if (sa[i].matches("\\d+")) { //如果格式化字符串是数字
            result &= (dt[i]==Integer.valueOf(sa[i]).intValue());
        } else (! "*".equals(sa[i])) { //如果格式化字符串不是*号
            result = false;
        }
    }
    return result;
}

------解决方案--------------------
这个应该能解决你说的缺省的情况
Java code

    public static void main(String args[]) throws Exception{
        Date date = new Date();
        System.out.println(t(date,"07 * * * *"));
    }
    
    public static boolean t(Date date,String s) {
        SimpleDateFormat sdf = new SimpleDateFormat("mm HH dd MM yyyy");
        String strDate = sdf.format(date);
        System.out.println(strDate);
        String regex = getRegex(s);
        Matcher m = Pattern.compile(regex).matcher(strDate);
        return m.matches();
    }
    
    private static String getRegex(String str){
        String[] strings = str.split("\\s+");
        if(strings.length != 5){
            String[] ss = {"*","*","*","*","*"};
            for(int i = 0; i < strings.length; i++){
                ss[i] = strings[i];
            }
            StringBuilder sb = new StringBuilder();
            for(int i = 0; i < ss.length; i++){
                if(i == ss.length - 1){
                    sb.append(ss[i]);
                }else{
                    sb.append(ss[i]).append(" ");
                }
            }
            str = sb.toString();
        }
        str = str.replaceAll("\\s+", "\\\\s+?");
        str = str.replaceAll("\\*", "\\\\d+?");
        return str;
    }