Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java日历算法问题_Java_Time_Calendar_Timeout_Math - Fatal编程技术网

Java日历算法问题

Java日历算法问题,java,time,calendar,timeout,math,Java,Time,Calendar,Timeout,Math,我在这里很难找到解决办法。很抱歉,如果以前已经回答过这个问题,但我找不到一个适合我的 问题:尝试测试用户会话的活动时间是否超过超时限制 我试图使用会话开始时间和当前系统时间,并减去它们,如果结果大于超时值,则终止会话 因此: 很明显,我在activeTime.add行上收到一条错误消息,但我不确定这里需要什么方法。任何帮助都很好,谢谢 Timeout当前设置为15分钟,但它是一个可以更改的全局变量。请阅读calendar.add方法中的API。该方法声明您还需要指定要添加的字段。 范例 但是你不

我在这里很难找到解决办法。很抱歉,如果以前已经回答过这个问题,但我找不到一个适合我的

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

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

因此:

很明显,我在activeTime.add行上收到一条错误消息,但我不确定这里需要什么方法。任何帮助都很好,谢谢


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>