log時差計算

public void log時差計算() {

long line = 0;
        List<String> lineList = new ArrayList<String>();
        try {
            Map<String, List<Long>> map = new HashMap<String, List<Long>>();
            
            File file = new File("C:\\work\\sifaccess.log20150130");
            BufferedReader reader = new BufferedReader(new FileReader(file));
            String tempString = null;
            // 読込
            String date1 = null;
            String id1 = null;
            String ip1 = null;
            String date2 = null;
            String id2 = null;
            String ip2 = null;
            while ((tempString = reader.readLine()) != null) {
                lineList.add(tempString);
            }
            reader.close();
            
            for (int i = 0; i < lineList.size(); i ++) {
                String lineStr = lineList.get(i);
                line ++;
                if (lineStr.indexOf(" UP   IF-ID") > 0) {
                    date1 = lineStr.substring(0, 23);
                    ip1 = lineStr.substring(24, lineStr.indexOf(", "));
                    id1 = lineStr.substring(lineStr.indexOf(" /") + 1, lineStr.indexOf(".htm") + 4);

// 次の行
                    boolean isFind = false;
                    for (int j = i + 1 ; j < lineList.size(); j ++) {
                        lineStr = lineList.get(j);
                        if (lineStr.indexOf(" UP ") > 0) {
                            continue;
                        }
                        ip2 = lineStr.substring(24, lineStr.indexOf(", "));
                        date2 = lineStr.substring(0, 23);
                        id2 = lineStr.substring(lineStr.indexOf(" /") + 1, lineStr.indexOf(".htm") + 4);
                        
                        if (ip1.equals(ip2) && id1.equals(id2)) {
                            SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss.SSS");

Date dateUP = formatter.parse(date1);
                            Date dateDOWN = formatter.parse(date2);
                            
                            long time = dateDOWN.getTime() - dateUP.getTime();
                                
                            if (map.containsKey(id1)) {
                                List<Long> list = (List<Long>)map.get(id1);
                                list.add(time);
                                map.put(id1, list);
                            }
                            else {
                                List<Long> list = new ArrayList<Long>();
                                list.add(time);
                                map.put(id1, list);
                            }
                            isFind = true;
                            break;
                        }
                    }
                    if (!isFind) {
                        System.out.println("error:" + line + "行");
                    }
                }

if (lineStr.indexOf(" DOWN method:") > 0) {
                    long time = Long.parseLong(lineStr.substring(lineStr.indexOf(" out:") + 5).replace("ms", ""));
                    id1 = lineStr.substring(lineStr.indexOf(" /") + 1, lineStr.indexOf(".htm") + 4);
                    
                    if (map.containsKey(id1)) {
                        List<Long> list = (List<Long>)map.get(id1);
                        list.add(time);
                        map.put(id1, list);
                    }
                    else {
                        List<Long> list = new ArrayList<Long>();
                        list.add(time);
                        map.put(id1, list);
                    }
                    
                }
            }
            System.out.println("読込終了:" + line + "行");

// 書き込み
            File outFile = new File("C:\\work\\access.txt");
            if(!outFile.exists()) {
                try {
                    outFile.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(outFile), "Shift_JIS");
            BufferedWriter bw = new BufferedWriter(osw);
            
            Set<String> set = map.keySet();
            for (String key : set) {
                
                List<Long> list = map.get(key);
                long min=99999999L;
                long max=0;
                long ave = 0;
                long sum = 0;
                for (Long second : list) {
                    long temp = second.longValue();
                    sum = sum + temp;
                    if (min > temp) {
                        min = temp;
                    }
                    if (max < temp) {
                        max = temp;
                    }
                }
                ave = sum / list.size();
                bw.write(key + "    " + min + "    " + max + "    " + ave + "    " + list.size() + "\r\n");
            }
            bw.close();
            osw.close();
            System.out.println("書込終了");

} catch (Exception e) {
            System.out.println("error line:" + line);
            e.printStackTrace();
        }
    }

时间: 2024-10-21 14:04:05

log時差計算的相关文章

各種日期時間計算

各種日期時間計算 //改變日期format string startStr = start.ToString("yyyy-MM-dd HH:mm:ss"); DateTime dt = Convert.ToDateTime(startStr);//轉回DateTime P.S format 大小寫意義不同: MM=month, mm=Minutes, HH=24hours, hh=12hours //日期時間相加減 DateTime start = Convert.ToDateTime

線陣相機處理時間計算方法

線陣相機圖像處理時間計算,以xx案子為例, 相機使用16K線陣 最大速度300mm/s FOV 300mm 計算方法: 1,            每個像素點大小=FOV/像素數=300/16*1000 2,            行頻=速度/每個像素點大小=300/(300/16*1000) = 16*1000 3,            相機數據量=行頻*像素數 = (16*1000)*(16*1000) = 256*1,000,000 byte= 256M/S 此案子一秒最大能產生256M

計算客/小教官(xjb)

題目鏈接:https://nanti.jisuanke.com/t/366 題意:中文題誒~ 思路: 先通過給出的條件構造一個符合題意的數組(可以是任意一個符合條件的數組,菜雞不會證明: 然後構造的數組和初始序列1, 2, 3, 4...n最少不同元素的個數就是答案: 這點是比較好理解的:題目中給出的b1, b2, ...bm可以是不連續的, 那麼如果每次選擇的m個與初始序列不同位置的元素並且通過一次操作後可以到達初始序列所在位置: 那麼所需代價肯定是最小的,總代價即爲位置不同的元素的數目. 所

ASP.NET計算日期是本月的第幾周

//計算當前日期是本月的第幾周 private int GetWeekNumInMonth(DateTime daytime) { int dayInMonth = daytime.Day; //本月第一天 DateTime firstDay = daytime.AddDays(1 - daytime.Day); //本月第一天是周几 int weekday = (int)firstDay.DayOfWeek == 0 ? 7 : (int)firstDay.DayOfWeek; //本月第一周

Delphi APP 開發入門(三)簡易計算機

Delphi APP 開發入門(三)簡易計算機 分享: Share on facebookShare on twitterShare on google_plusone_share 閲讀次數:6823 發表時間:2014/05/20 tags: 行動開發 教學 App Delphi XE6 Android iOS 上週大家學會了設定Android/iOS編譯環境以及寫出第一個Hello World之後,我們今天要來寫第一隻APP簡易計算機. 新增一個空白的APP專案後,我們在畫面上新增一個Edi

透過 bc 計算 pi

echo "scale=${num}; 4*a(1)" | bc -lq例如: echo "scale=5000; 4*a(1)" | bc -lq 4*a(1) 是 bc 主動提供的一個計算 pi 的函數,至於 scale 就是要 bc 計算幾個小數點下位數的意思.當 scale 的數值越大, 代表 pi 要被計算的越精確, 當然用掉的時間就會越多!可以以此来测试cpu的性能. 转自: http://linux.vbird.org/linux_basic/0340

配置凍結庫存是否參加MRP計算及PO的相關設置

SPRO->生產->物料需求計劃->計劃->MRP計算->庫存->定義轉移庫存/凍結庫存/有限庫存的可用性 2.交貨完成 SPRO->物料管理->庫存管理和實際庫存->收貨->設置交貨完成標誌 標記完成了的,是不會參與MRP計算的,但是還可以繼續收貨的 3.設置容差 後台設置:SPRO->物料管理->庫存掛家裡和實際庫存->收貨->設置容差限制 4.退貨PO A.自動建立採購訂單 後台設置:SPRO->物料管理-&g

計算機的組成及其功能

計算機的組成.計算機是由硬件(Hardware)系統和軟件(Software)系統兩方面所組合而成. 計算機系統硬件組部分,以數學家(約翰·馮·諾依曼John von Neumann)所提出計算機,分成五大組件. 五大組件: 運算器, 控制器, 儲存器, 輸入設備, 輸出設備 分別設置為主機和外設. 主機 ==> 運算器 ==> 控制器 外設 ==> 儲存器 ==> 輸入設備 ==> 輸出設備 注釋:計算機(Computer電腦)是一種能接收和儲存信,併按照其內部(程式/程序

【財務会計】利润表(損益計算書)中日对照

1. 利润表について 利润表  lìrùnbio  損益計算書 营业收入 yíngyè shurù  売上高 减:营业成本 yíngyè chéngbn 売上原価 营业税金及附加  yíngyè shuìjn jí fùji  営業税等 销售费用 xioshòu fèiyòng 販売費 管理费用 gunl fèiyòng 管理費 财务费用 cáiwù fèiyòng 財務費(支払利子や為替差損益etc) 资产减值损失  zchn jinzhí snsh  減損損失 加:公允价值变动收益  gng