Java日历算法问题
我在这里很难找到解决办法。很抱歉,如果以前已经回答过这个问题,但我找不到一个适合我的 问题:尝试测试用户会话的活动时间是否超过超时限制 我试图使用会话开始时间和当前系统时间,并减去它们,如果结果大于超时值,则终止会话 因此: 很明显,我在activeTime.add行上收到一条错误消息,但我不确定这里需要什么方法。任何帮助都很好,谢谢Java日历算法问题,java,time,calendar,timeout,math,Java,Time,Calendar,Timeout,Math,我在这里很难找到解决办法。很抱歉,如果以前已经回答过这个问题,但我找不到一个适合我的 问题:尝试测试用户会话的活动时间是否超过超时限制 我试图使用会话开始时间和当前系统时间,并减去它们,如果结果大于超时值,则终止会话 因此: 很明显,我在activeTime.add行上收到一条错误消息,但我不确定这里需要什么方法。任何帮助都很好,谢谢 Timeout当前设置为15分钟,但它是一个可以更改的全局变量。请阅读calendar.add方法中的API。该方法声明您还需要指定要添加的字段。 范例 但是你不
Timeout当前设置为15分钟,但它是一个可以更改的全局变量。请阅读calendar.add方法中的API。该方法声明您还需要指定要添加的字段。 范例 但是你不需要使用日历操作 只需将curentTimeInMillis与起始时间(millis)相减,如果更大(以millis为单位),则超时时间即为答案
long refTime = System.currentTimeMillis();
long now = System.currentTimeMillis();
if ( now - refTime > TIMEOUT ) {
... }
你的样品似乎有一些错误,但我会这样做
Calendar sessionEndTime = logSession.getStartTime();
sessionEndTime.add(Calendar.MINUTE, TIMEOUT_MINS);
Calendar currentSysTime = Calendar.getInstance();
if (currentSysTime.after(sessionEndTime)) {
//do something
}
如果将会话开始时间与当前时间进行比较,结果将是每个会话都有一个最大期限,并将重置rgardless活动
您需要在
logSession
对象中为上一次活动时间设置一个属性,并使用该属性与当前时间进行比较。如果这些时间是简单的long
字段,并且分配了System.currentTimeMilis()
您不需要日历
算法。我假设您在某个web容器中,并且有一个web.xml可用。你不能用标准的吗
<session-config>
<session-timeout>30</session-timeout>
</session-config>
30
错误消息是什么?另外,我不明白为什么这里需要setTime调用:Calendar currentSysTime=Calendar.getInstance();currentSysTime.setTime(currentSysTime.getTime());感谢您的这种方法,但是我在sessionEndTime的分配上遇到了一个错误-无法将void转换为日历。日历会话开始时间=logSession.getStartTime();Calendar currentSysTime=Calendar.getInstance();Calendar sessionEndTime=sessionStartTime.add(Calendar.MINUTE,timeout_mins);有什么想法吗?哦!很抱歉,出于某种原因,我认为日历是不可变的。我真傻。我将编辑我的帖子以反映你应该做什么!谢谢你的伟大解决方案!建议最好的方法!
for (LogSession logSession : sessionLogList) {
Calendar sessionStartTime = logSession.getStartTime();
Long now = System.currentTimeMillis();
if (now - sessionStartTime.getTimeInMillis() > timeoutLimit) {
// Do something
}
}
Calendar sessionEndTime = logSession.getStartTime();
sessionEndTime.add(Calendar.MINUTE, TIMEOUT_MINS);
Calendar currentSysTime = Calendar.getInstance();
if (currentSysTime.after(sessionEndTime)) {
//do something
}
<session-config>
<session-timeout>30</session-timeout>
</session-config>