java统计当前在线数

  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: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){
  //得到用户当前访问时间
  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;
  }