Арифметическая проблема календаря Java - PullRequest
2 голосов
/ 19 ноября 2010

Не могу найти решение для моей ситуации здесь.Извините, если на этот вопрос уже отвечали, но я не смог найти тот, который работал для меня.

Проблема: Попытка проверить, был ли сеанс пользователя активным дольше, чем предел времени ожидания.

Я пытаюсь использовать время начала сеанса и текущее системное время и вычесть их, и если результат больше, чем время ожидания var - убить сеанс.1008 *

Я, очевидно, получаю сообщение об ошибке в строке activeTime.add, но не уверен в необходимом подходе здесь.Спасибо за любую помощь.

Время ожидания в настоящее время установлено на 15 минут, но это глобальная переменная, которую можно изменить.

Ответы [ 5 ]

3 голосов
/ 19 ноября 2010

Прочитайте API, в методе calendar.add указано, что вам нужно указать, к какому полю вы хотите добавить.Пример

calendar.add(Calendar.HOUR, 24);

Но вам не нужно использовать манипуляции с календарем.

Просто сделайте вычитание curentTimeInMillis по сравнению со временем начала в миллисисах и, если оно больше (в миллис), тогда у вас будет тайм-аутваш ответ

long refTime = System.currentTimeMillis();
long now = System.currentTimeMillis(); 
if ( now - refTime > TIMEOUT ) { 
     ... } 
1 голос
/ 19 ноября 2010

В вашем образце, похоже, есть несколько ошибок, но вот как я бы это сделал.

Calendar sessionEndTime = logSession.getStartTime();
sessionEndTime.add(Calendar.MINUTE, TIMEOUT_MINS);
Calendar currentSysTime = Calendar.getInstance();
if (currentSysTime.after(sessionEndTime)) {
//do something
}
1 голос
/ 19 ноября 2010
 for (LogSession logSession : sessionLogList) {

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

                if (now - sessionStartTime.getTimeInMillis() > timeoutLimit) {
                       // Do something
                }
}
0 голосов
/ 19 ноября 2010

Я предполагаю, что вы находитесь в каком-то веб-контейнере и имеете доступ к web.xmlНе могли бы вы использовать стандарт?

<session-config>
 <session-timeout>30</session-timeout> 
</session-config>
0 голосов
/ 19 ноября 2010

Если вы сравните время начала сеанса и текущее время, результатом будет то, что у каждого сеанса будет максимальный возраст, и он будет сбрасываться вне зависимости от активности.ваш logSession объект и используйте его для сравнения с текущим временем.Если эти времена являются простыми long полями и им присвоено System.currentTimeMilis(), то вам не нужна Calendar арифметика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...