package com.hnedu.stat; /**  * 计算在线人数,说明:  *  * 在访问页面放入:  * com.hnedu.stat.OnlineCounter.addUser(Object object)  * 一般用ip来作为object的传入值,当然,如果网站统计登陆在线人数,也可用用户名  * 来作为object传入值。  *  * 调用显示在线人数  * com.hnedu.stat.OnlineCounter.getOnlineCount() *  *  * com.hnedu.stat.OnlineCounter.getOnline()  * 返回一个List,里面以String[]形式存放传入的object值和最后访问页面时间。  * by crazyren 2003-08-05 email: [email protected]  */ 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) {     //得到用户当前访问时间     String nowtime = com.hnedu.util.StringUtils.getTime("mm:ss");     //Str数组用来存放用户得ip和访问时间     String[] str = new String[2];     str[0] = object.toString();     str[1] = nowtime; 
    //temp数组用来临时存放从list里面取出的用户ip和访问时间     String[] temp = new String[2]; 
    //循环list     for (int i = 0; i < list.size(); i++) {       temp = (String[])list.get(i);       //如果从list里面取出的用户ip和str里面存放的ip相同,则更新访问时间       if(temp[0].equals(str[0])) {         list.set(i,str);         return;       }       //如果用户超过5分钟没有访问,则认为不在线       if(subTime(nowtime,temp[1]) > 300) {         list.remove(i);       }     }     //添加一个新的在线用户     list.add(str);     //释放资源     str = null;temp = null;   } 
  public static int getOnlineCount() {     //返回当前在线人数     return list.size();   } 
  public static List getOnline() {     return list;   }   /** 计算两个时间差,返回相差秒数 */   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里面的两个方法: 
  /**    * 获得当前时间    * @param parrten 输出的时间格式    * @return 返回时间    */   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;   } 
  /**    * 比较两个字符串时间的大小    * @param t1 时间1    * @param t2 时间2    * @param parrten 时间格式 :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;   }  
 
  |