package com.hnedu.stat; /** * 計(jì)算在線人數(shù),說(shuō)明: * * 在訪問(wèn)頁(yè)面放入: * com.hnedu.stat.OnlineCounter.addUser(Object object) * 一般用ip來(lái)作為object的傳入值,當(dāng)然,如果網(wǎng)站統(tǒng)計(jì)登陸在線人數(shù),也可用用戶名 * 來(lái)作為object傳入值。 * * 調(diào)用顯示在線人數(shù) * com.hnedu.stat.OnlineCounter.getOnlineCount() * * * com.hnedu.stat.OnlineCounter.getOnline() * 返回一個(gè)List,里面以String[]形式存放傳入的object值和最后訪問(wèn)頁(yè)面時(shí)間。 * by crazyren 2003-08-05 email: c_crazyren@hotmail.com */ import java.util.List; import java.util.ArrayList; import javax.servlet.http.HttpSession; public class OnlineCounter { private static List list = new ArrayList();
private OnlineCounter() { } public static void addUser(Object object) { //得到用戶當(dāng)前訪問(wèn)時(shí)間 String nowtime = com.hnedu.util.StringUtils.getTime("mm:ss"); //Str數(shù)組用來(lái)存放用戶得ip和訪問(wèn)時(shí)間 String[] str = new String[2]; str[0] = object.toString(); str[1] = nowtime;
//temp數(shù)組用來(lái)臨時(shí)存放從list里面取出的用戶ip和訪問(wèn)時(shí)間 String[] temp = new String[2];
//循環(huán)list for (int i = 0; i < list.size(); i++) { temp = (String[])list.get(i); //如果從list里面取出的用戶ip和str里面存放的ip相同,則更新訪問(wèn)時(shí)間 if(temp[0].equals(str[0])) { list.set(i,str); return; } //如果用戶超過(guò)5分鐘沒(méi)有訪問(wèn),則認(rèn)為不在線 if(subTime(nowtime,temp[1]) > 300) { list.remove(i); } } //添加一個(gè)新的在線用戶 list.add(str); //釋放資源 str = null;temp = null; }
public static int getOnlineCount() { //返回當(dāng)前在線人數(shù) return list.size(); }
public static List getOnline() { return list; } /** 計(jì)算兩個(gè)時(shí)間差,返回相差秒數(shù) */ private static int subTime(String src,String des) { int n = 0; java.util.Calendar ca = java.util.Calendar.getInstance(); long time1 = com.hnedu.util.StringUtils.compareStringTime(src,des,"mm:ss"); ca.setTimeInMillis(time1); n = (ca.get(java.util.Calendar.MINUTE)) * 60; n = n + ca.get(java.util.Calendar.SECOND); return n; } }
引用的StringUtils里面的兩個(gè)方法:
/** * 獲得當(dāng)前時(shí)間 * @param parrten 輸出的時(shí)間格式 * @return 返回時(shí)間 */ public static String getTime(String parrten) { String timestr; if(parrten==null||parrten.equals("")) { parrten="yyyyMMddHHmmss"; } java.text.SimpleDateFormat sdf=new SimpleDateFormat(parrten); java.util.Date cday=new Date(); timestr=sdf.format(cday); return timestr; }
/** * 比較兩個(gè)字符串時(shí)間的大小 * @param t1 時(shí)間1 * @param t2 時(shí)間2 * @param parrten 時(shí)間格式 :yyyy-MM-dd * @return 返回long =0相等,>0 t1>t2,<0 t1<t2 */ public static long compareStringTime(String t1,String t2,String parrten) { SimpleDateFormat formatter = new SimpleDateFormat (parrten); ParsePosition pos = new ParsePosition(0); ParsePosition pos1 = new ParsePosition(0); Date dt1=formatter.parse(t1,pos); Date dt2=formatter.parse(t2,pos1); long l=dt1.getTime()-dt2.getTime(); return l; }
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!