2010-11-19 9 views
2

내 상황에 대한 해결책을 찾는 데 어려움이 있습니다. 죄송합니다. 이전에 대답이되었지만 나에게 효과가있는 것을 찾지 못했습니다.자바 캘린더 산술 문제

문제점 : 사용자 세션이 제한 시간보다 오래 동안 활성 상태인지 테스트하려고 시도했습니다.

세션 시작 시간과 현재 시스템 시간을 사용하여 빼고 결과가 시간 초과보다 큰 경우 var - 세션을 종료하십시오. 그래서

: 나는 분명히 activeTime.add 라인에 오류 메시지를 받고 있지만, 여기에 필요한 접근 방식이 확실하고

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

. 어떤 도움이라도 대단히 감사 할 것입니다.

제한 시간은 현재 15 분으로 설정되어 있지만 변경할 수있는 전역 변수입니다.

+0

오류 메시지 란 무엇입니까? 또한 setTime 호출이 필요한 이유는 여기에 나와 있습니다. Calendar currentSysTime = Calendar.getInstance(); currentSysTime.setTime (currentSysTime.getTime()); –

답변

1

샘플은 거기에 몇 가지 오류가있는 것 하지만 여기에 내가 어떻게 그것에 대해 갈 것입니다. 당신은 세션 시작 시간과 현재 시간을 비교하면

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

이 접근 방식 뇌 주셔서 감사하지만 sessionEndTime의 할당에 오류가 발생했습니다 - void를 Calendar로 변환 할 수 없습니다. 달력 sessionStartTime = logSession.getStartTime(); Calendar currentSysTime = Calendar.getInstance(); 캘린더 sessionEndTime = sessionStartTime.add (Calendar.MINUTE, timeout_mins); 어떤 아이디어? – Frank

+0

Ooops! 죄송합니다. 어떤 이유로 달력을 변경할 수 없다고 가정했습니다. 어리석은 어리석은 나. 내가해야 할 일을 반영하도록 내 게시물을 수정합니다! – brain

+0

위대한 솔루션에 감사드립니다! 최상의 접근 방식이 제안되었습니다! – Frank

3

API를 읽으려면 calendar.add 메소드에서 추가 할 필드가 무엇인지 구체적으로 설명해야합니다. 예

calendar.add(Calendar.HOUR, 24); 

는하지만 당신은 좀 달력 조작을 사용할 필요 없어요.

그냥 밀리 시간을 시작 대 curentTimeInMillis의 뺄셈을하고 (밀리 세컨드)에 더 큰 다음 시간 제한은 당신이 당신의 대답이있는 경우

long refTime = System.currentTimeMillis(); 
long now = System.currentTimeMillis(); 
if (now - refTime > TIMEOUT) { 
    ... } 
1
for (LogSession logSession : sessionLogList) { 

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

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

, 결과는 모든 세션이 최대 연령을 가지고 있으며, 활동의 rgardless을 다시 것입니다 될 것입니다.

logSession 개체의 마지막 활성화 시간 속성이 필요하며이를 사용하여 현재 시간과 비교합니다. 이 시간이 단순한 경우 long 필드에 System.currentTimeMilis()을 할당하면 Calendar 연산이 필요하지 않습니다.

0

일부 웹 컨테이너에 있고 web.xml을 사용할 수 있다고 가정합니다. 표준을 사용할 수 없습니까?

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