要做一个小工具,对某些系统或者软件的log文件进行压缩备份。工具要求具有一定的通用性。
具体要求很简单:
保留15日以内的log;
15日以上的log进行压缩再保存;
3个月前压缩的log信息,删除不再留存。现在要处理的log文件有2种,一种是按日期生成的log文件(比如:XXXX-2012-11-28.log)
还有一种是只有一个log文件,全部内容写在一个文件里。这样,要读取的字符串一种是文件名,一种是log文件中的log信息
如何将字符串中的日期部分提取出来,提取后日期的处理是我目前的最大难题。
原因是各种log信息中所包含的日期格式是不一样的。
举几个例子:
2012-11-28
2012/11/28
Wed Sep 19 10:27:10 2012
31/Oct/2012:22:45:13
等等如何处理?请高手指点!

解决方案 »

  1.   

    这个不太好处理,只能针对每一种格式,不同的处理,
    public static void main(String[] args) { try { String str = "Wed Sep 19 10:27:10 2012";
    String time = "";
    String[] week = { "Mon", "Tues", "Wed", "Thur", "Fri", "Sat", "Sun" }; // 去除掉星期几
    for (int i = 0; i < 7; i++) {
    str = str.replace(week[i], "");
    } // 去除掉小时,分钟,秒
    str = str.replaceAll("[' '/:]\\d{2}:\\d{2}:\\d{2}", "");
    // 去掉/和空格
    time = str.replaceAll("\\/", "-").replaceAll(" ", "-");
    // 去掉头部的"-"
    if (time.indexOf("-") == 0) {
    time = time.substring(1, time.length() - 1);
    } String[] month = { "Jan", "Feb", "Mar", "Apr", "May", "June",
    "July", "Aug", "Sep", "Oct", "Nov", "Dec" };
    String[] monthNum = { "01", "02", "03", "04", "05", "06", "07",
    "08", "09", "10", "11", "12" };
    boolean isEnglishMonth = false;
    boolean isStartEnglish = false; // 是否是英文月份开头
    if (time.substring(0, 1).matches("[A-Z]")) {
    isStartEnglish = true;
    }
    // 是否包含英文的月份
    for (int i = 0; i < 12; i++) {
    if (time.indexOf(month[i]) > -1) {
    isEnglishMonth = true;
    time = time.replace(month[i], monthNum[i]);
    break;
    }
    }
    String[] times = time.split("-"); if (isEnglishMonth) {
    if (isStartEnglish) {
    System.out.println(times[2] + "-" + times[0] + "-"
    + times[1]);
    } else {
    System.out.println(times[2] + "-" + times[1] + "-"
    + times[0]);
    } } else {
    System.out.println(time);
    } } catch (Exception e) {
    e.printStackTrace();
    } }
    适合你上面的几种,其他的,可能还要加判断