Какой самый эффективный способ проверить, принадлежат ли два длинных значения (в миллисекундах) одной секунде? - PullRequest
3 голосов
/ 01 марта 2010

В настоящее время я использую TimeUnit.MILLISECONDS.toSeconds(valueInMillis), чтобы проверить, приходят ли два миллисекундных значения с одной и той же секунды. Можете ли вы порекомендовать более быстрый алгоритм для этой операции?

Спасибо.

Ответы [ 3 ]

5 голосов
/ 01 марта 2010

Разделите каждое на 1000. Поскольку они являются целыми / длинными, десятичная дробь будет усечена. Если они находятся в одинаковых секундах, значения будут одинаковыми.

3 голосов
/ 01 марта 2010

Это код, стоящий за TimeUnit.MILLISECONDS.toSecond(long d):

public long toSeconds(long d) { return d/(C3/C2); }

, где C2, C3 - статические константы. Вы можете сохранить одно деление ... В этом случае я предпочел ваш реальный код, это легче понять

1 голос
/ 01 марта 2010

Предполагая, что t1 и t2 являются временными метками. Например, из System.currentTimeMillis ()

public static boolean isSameSecond(long t1, long t2){
  return (t1/1000) == (t2/1000)
}
...