Java свидание перейти к следующей 10-й минуте - PullRequest
4 голосов
/ 05 января 2011

Мне нужна быстрая реализация алгоритма «скачка даты», который должен быть включен в систему управления событиями.Событие запускается и устанавливает дату (в синхронизированном методе) на следующую 10-ую минуту.

Например,

  Event occurs at "2010-01-05 13:10:12" and sets the 
  next date to be "2010-01-05 13:20:00"

, и если событие происходит точно (предположительно) на 10-й минуте следующее должно быть установлено

  Event occurs at "2010-01-05 13:30:00" and sets the 
  next date to be "2010-01-05 13:40:00"

(маловероятно, поскольку дата уменьшается до 1/1000 секунды, но на всякий случай ...).

Моей первой идеей было бы получить текущий Date() и работать напрямую с ms из метода getTime () через целочисленное (длинное) деление, например ((time / 10mn)+1)*10mn.

Так какдолжен быть быстрый , а также надежный , я подумал, что я спрошу у моих коллег OS до реализации.

Ответы [ 2 ]

9 голосов
/ 05 января 2011

Вы можете использовать / адаптировать мой ответ к очень похожему вопросу:

Как округлить время до ближайшего квартала в java?

Примерно так:

int unroundedMinutes = calendar.get(Calendar.MINUTE);
int mod = unroundedMinutes % 10;
calendar.add(Calendar.MINUTE, mod == 0 ? 10 : 10 - mod);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
0 голосов
/ 05 января 2011

Ваш подход с временем эпохи в мс не будет работать для произвольных часовых поясов, поскольку некоторые часовые пояса имеют смещение N * 15 минут от GMT.В этих часовых поясах ваш код будет перемещать интервал с 5-14 до 15, с 15-24 до 25 и т. Д.

Проверяли ли вы производительность при работе с соответствующими полями в классе GregorianCalendar и пришли к выводу,производительность недостаточна, или вы пытаетесь изобрести велосипед просто для удовольствия?

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