服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

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;
  }

扫描关注微信公众号