Java Calendar算术问题

时间:2010-11-19 14:32:40

标签: java time calendar timeout math

无法在这里找到适合我情况的解决方案。很抱歉,如果之前已经回答过,但我找不到适合我的那个。

问题:尝试测试用户会话是否处于活动状态的时间超过超时限制。

我正在尝试使用会话开始时间和当前系统时间并减去它们,如果结果大于超时var,则终止会话。

所以:

 for (LogSession logSession : sessionLogList) {

                Calendar sessionStartTime = logSession.getStartTime();
                Calendar currentSysTime = Calendar.getInstance();
                currentSysTime.setTime(currentSysTime.getTime());
                Calendar activeTime = Calendar.getInstance();

                activeTime.setTime(sessionStartTime.getTime());
                activeTime.add(activeTime.getTime(), - currentSysTime.getTime());

                if ( activeTime.getTime() > timeoutLimit) {
                       // Do something
                }
}

我显然在activeTime.add行上收到错误消息,但我不确定这里需要的方法。任何帮助都会非常感谢。

超时当前设置为15分钟,但是可以更改的全局变量。

5 个答案:

答案 0 :(得分:3)

阅读API,在calendar.add方法中声明您需要特定于您要添加的字段。 实施例

calendar.add(Calendar.HOUR, 24);

但你有点不需要使用日历操作。

只需减去curentTimeInMillis与以毫秒为单位的开始时间,如果更大(以毫秒为单位),那么你的超时就会得到答案

long refTime = System.currentTimeMillis();
long now = System.currentTimeMillis(); 
if ( now - refTime > TIMEOUT ) { 
     ... } 

答案 1 :(得分:1)

 for (LogSession logSession : sessionLogList) {

                Calendar sessionStartTime = logSession.getStartTime();
                Long now = System.currentTimeMillis();

                if (now - sessionStartTime.getTimeInMillis() > timeoutLimit) {
                       // Do something
                }
}

答案 2 :(得分:1)

你的样本中似乎有一些错误,但这就是我要采取的方法。

Calendar sessionEndTime = logSession.getStartTime();
sessionEndTime.add(Calendar.MINUTE, TIMEOUT_MINS);
Calendar currentSysTime = Calendar.getInstance();
if (currentSysTime.after(sessionEndTime)) {
//do something
}

答案 3 :(得分:0)

如果您比较会话开始时间和当前时间,结果将是每个会话都有一个最大年龄,并将重置无活动。

您需要logSession对象中最后一次活动时间的属性,并使用该属性与当前时间进行比较。如果这些时间是简单的long字段并分配了System.currentTimeMilis(),则您不需要Calendar算术。

答案 4 :(得分:0)

我假设您在某个Web容器中并且可以使用web.xml。你不能使用标准吗?

<session-config>
 <session-timeout>30</session-timeout> 
</session-config>