要做一个小工具,对某些系统或者软件的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
等等如何处理?请高手指点!
具体要求很简单:
保留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
等等如何处理?请高手指点!
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();
} }
适合你上面的几种,其他的,可能还要加判断