当前位置: 代码迷 >> J2SE >> 关于解析时间字符串,该怎么解决
  详细解决方案

关于解析时间字符串,该怎么解决

热度:94   发布时间:2016-04-24 01:13:50.0
关于解析时间字符串
本人有个方法:
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;    }
  相关解决方案