211.136.253.102 - - [20/Jul/2009:00:03:15 +0800] "GET /aqdy/fee?rdn=212&backurl=http%3A%2F%2F210.51.15.149%
211.136.253.102 - - [20/Jul/2009:00:03:16 +0800] "POST /aqdy/deal HTTP/1.0" 200 612
211.136.253.102 - - [20/Jul/2009:00:03:16 +0800] "GET /aqdy/fee?rdn=212&backurl=http%3A%2F%2F210.51.15.149%211.136.253.102 - - [20/Jul/2009:00:03:18 +0800] "POST /aqdy/deal HTTP/1.0" 200 612
211.136.253.102 - - [20/Jul/2009:00:03:18 +0800] "GET /aqdy/fee?rdn=212&backurl=http%3A%2F%2F210.51.15.149%211.136.253.102 - - [20/Jul/2009:00:03:19 +0800] "POST /aqdy/deal HTTP/1.0" 200 612
211.136.253.102 - - [20/Jul/2009:00:03:19 +0800] "POST /aqdy/deal HTTP/1.0" 200 612有这样一些数据 我想得到含有 "GET /aqdy/fee?rdn=212&backurl=http%3A%2F%2F210.51.15.149% 这条数据的时间 时间最好是SqlServer 那种2009-08-13 17:06:52.123 像这样的格式
211.136.253.102 - - [20/Jul/2009:00:03:16 +0800] "POST /aqdy/deal HTTP/1.0" 200 612
211.136.253.102 - - [20/Jul/2009:00:03:16 +0800] "GET /aqdy/fee?rdn=212&backurl=http%3A%2F%2F210.51.15.149%211.136.253.102 - - [20/Jul/2009:00:03:18 +0800] "POST /aqdy/deal HTTP/1.0" 200 612
211.136.253.102 - - [20/Jul/2009:00:03:18 +0800] "GET /aqdy/fee?rdn=212&backurl=http%3A%2F%2F210.51.15.149%211.136.253.102 - - [20/Jul/2009:00:03:19 +0800] "POST /aqdy/deal HTTP/1.0" 200 612
211.136.253.102 - - [20/Jul/2009:00:03:19 +0800] "POST /aqdy/deal HTTP/1.0" 200 612有这样一些数据 我想得到含有 "GET /aqdy/fee?rdn=212&backurl=http%3A%2F%2F210.51.15.149% 这条数据的时间 时间最好是SqlServer 那种2009-08-13 17:06:52.123 像这样的格式
if(数据.indexOf("GET /aqdy/fee?rdn=212&backurl=http%3A%2F%2F210.51.15.149%") != -1)
{
时间转化器
}
这样是一行数据 +0800 不用理会 就得到 20/Jul/2009:00:03:15 这个时间可以了
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Test { public static void main(String args[]) {
List<String> li = convert(getDateList(createData()));
for(String s : li){
System.out.println(s);
}
}
/**
* convert date to string with right time format
*
* @param li
* @return
*/
public static List<String> convert(List<Date> li){
List<String> returnList = new ArrayList<String>();
if(li!=null){
for(Date date : li){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.S");
String strDate = sdf.format(date);
returnList.add(strDate);
}
}
return returnList;
} /**
* create testing data
*
* @return
*/
public static List<String> createData(){
List<String> li = new ArrayList<String>();
li.add("211.136.253.102 - - [19/Oct/2009:13:43:45 +0800] \"GET /aqdy/fee?rdn=212&backurl=http%3A%2F%2F210.51.15.149%");
li.add("211.136.253.102 - - [20/Sept/2009:06:33:16 +0800] \"POST /aqdy/deal HTTP/1.0\" 200 612");
li.add("211.136.253.102 - - [11/Jul/2009:23:04:44 +0800] \"GET /aqdy/fee?rdn=212&backurl=http%3A%2F%2F210.51.15.149%");
li.add("211.136.253.102 - - [15/Jan/2009:00:08:16 +0800] \"POST /aqdy/deal HTTP/1.0\" 200 612");
li.add("211.136.253.102 - - [27/Jun/2009:21:53:28 +0800] \"GET /aqdy/fee?rdn=212&backurl=http%3A%2F%2F210.51.15.149%");
li.add("211.136.253.102 - - [03/May/2009:03:22:47 +0800] \"POST /aqdy/deal HTTP/1.0\" 200 612");
li.add("211.136.253.102 - - [23/Aug/2009:14:11:19 +0800] \"POST /aqdy/deal HTTP/1.0\" 200 612");
return li;
}
/**
* get date list from string list
*
* @param li
* @return
*/
public static List<Date> getDateList(List<String> li){
List<Date> dateList = new ArrayList<Date>();
for(String str : li){
Pattern pattern = Pattern.compile("\"GET");
Matcher matcher = pattern.matcher(str);
if(matcher.find()){
dateList.add(getDate(str));
}
}
return dateList;
}
/**
* string like : 211.136.253.102 - - [20/Jul/2009:00:03:15 +0800] \"GET /aqdy/fee?rdn=212&backurl=http%3A%2F%2F210.51.15.149%
*
* @param source
* @return
*/
public static Date getDate(String source){
Date date = new Date();
if(source!=null && !"".equals(source)){
String dateStr = "";
int startIndex = source.indexOf("[");
int endIndex = source.indexOf("+0800]");
if(startIndex!=-1 && endIndex!=-1){
dateStr = source.substring(startIndex+1, endIndex-1);
date = str2Date(dateStr);
}
}
return date;
}
/**
* format : 20/Jul/2009:00:03:18
*
* @param strDate
* @return
*/
public static Date str2Date(String strDate){
Date returnDate = new Date();
int split = strDate.indexOf(":");
String date = strDate.substring(0, split);
String time = strDate.substring(split+1, strDate.length());
String[] dateArray = date.split("/");
String[] timeArray = time.split(":");
String strYear = dateArray[2];
int year = Integer.parseInt(strYear);
String strMonth = dateArray[1];
int month = str2Int(strMonth);
String strDay = dateArray[0];
int day = Integer.parseInt(strDay);
String strHour = timeArray[0];
int hour = Integer.parseInt(strHour);
String strMinute = timeArray[1];
int minute = Integer.parseInt(strMinute);
String strSecond = timeArray[2];
int second = Integer.parseInt(strSecond);
Calendar calendar = Calendar.getInstance();
calendar.set(year, month, day, hour, minute, second);
returnDate = calendar.getTime();
return returnDate;
}
/**
* Jan - 1, Feb - 2...
*
* @param strMon
* @return
*/
public static int str2Int(String strMon){
int returnMon = 1;
if(strMon==null)
strMon = "";
if("Jan".equalsIgnoreCase(strMon) || strMon.startsWith("Jan")){
returnMon = 1;
}else if("Feb".equalsIgnoreCase(strMon) || strMon.startsWith("Feb")){
returnMon = 2;
}else if("Mar".equalsIgnoreCase(strMon) || strMon.startsWith("Mar")){
returnMon = 3;
}else if("Apr".equalsIgnoreCase(strMon) || strMon.startsWith("Apr")){
returnMon = 4;
}else if("May".equalsIgnoreCase(strMon) || strMon.startsWith("May")){
returnMon = 5;
}else if("Jun".equalsIgnoreCase(strMon) || strMon.startsWith("Jun")){
returnMon = 6;
}else if("Jul".equalsIgnoreCase(strMon) || strMon.startsWith("Jul")){
returnMon = 7;
}else if("Aug".equalsIgnoreCase(strMon) || strMon.startsWith("Aug")){
returnMon = 8;
}else if("Sept".equalsIgnoreCase(strMon) || strMon.startsWith("Sep")){
returnMon = 9;
}else if("Oct".equalsIgnoreCase(strMon) || strMon.startsWith("Oct")){
returnMon = 10;
}else if("Nov".equalsIgnoreCase(strMon) || strMon.startsWith("Nov")){
returnMon = 11;
}else if("Dec".equalsIgnoreCase(strMon) || strMon.startsWith("Dec")){
returnMon = 12;
}
return returnMon;
}
}
改为int returnMon = 0; 从0开始 ,不然取到的月份比实际多一个月
呵呵,是的,忘记了,我现在取到的都比实际月份多一个月,应该改一下str2Int方法,返回值都减一。
月份是从0开始的