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 像这样的格式 

解决方案 »

  1.   

    用正则提取,用SimpleDateFormat转为你需要的格式.
      

  2.   

    这些数据是字符串?
    if(数据.indexOf("GET /aqdy/fee?rdn=212&backurl=http%3A%2F%2F210.51.15.149%") != -1)
    {
    时间转化器
    }
      

  3.   

    我也不大会正则,有sample吗?
      

  4.   

    忘记说了 这些数据是保存在一个 txt文件里
      

  5.   

    看不懂你的数据,我怎么发现:"GET /aqdy/fee?rdn=212&backurl=http%3A%2F%2F210.51.15.149%"这个东西有好几个?
      

  6.   

    20/Jul/2009:00:03:15 +0800这个是时间吧,+0800是什么意思?
      

  7.   

    211.136.253.102 - - [20/Jul/2009:00:03:15 +0800] "GET /aqdy/fee?rdn=212&backurl=http%3A%2F%2F210.51.15.149% 
    这样是一行数据 +0800 不用理会 就得到 20/Jul/2009:00:03:15 这个时间可以了
      

  8.   

    刚做完项目比较闲,打发了一下时间,还耽误了一会加会班。呵呵!package com.icesoft.test;import java.text.SimpleDateFormat;
    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;
    }

    }
      

  9.   

    自己修改 yyyy-MM-dd hh:mm:ss.S 格式,吧hh改成HH可变化为24小时格式
      

  10.   

    谢谢  IceWee  和大家 问题解决了, 其中 int returnMon = 1; 
    改为int returnMon = 0; 从0开始 ,不然取到的月份比实际多一个月
      

  11.   


    呵呵,是的,忘记了,我现在取到的都比实际月份多一个月,应该改一下str2Int方法,返回值都减一。
    月份是从0开始的