Какой из них рекомендуется: Instant.now (). ToEpochMilli () или System.currentTimeMillis () - PullRequest
2 голосов
/ 05 ноября 2019

В Java у нас может быть много разных способов получить текущую временную метку, но какой из них рекомендуется: Instant.now().toEpochMilli() или System.currentTimeMillis()

Ответы [ 2 ]

3 голосов
/ 05 ноября 2019

Оба в порядке. И ни одна из них не рекомендуется, за исключением небольшого количества целей.

Что вам нужно миллисекунд с начала эпохи?

В Java у нас может быть много разных способов получить текущую метку времени,

Для текущей отметки времени просто используйте Instant.now(). Нет необходимости конвертировать в миллисекунды.

Многие методы с первых лет Java, также многие в стандартной библиотеке, взяли long количество миллисекунд с начала эпохи в качестве аргумента. Однако сегодня я считаю это старомодным. Посмотрите, сможете ли вы найти - или создать - или более современный метод, который вместо этого принимает, например, Instant в качестве аргумента. Идите объектно-ориентированный и не используйте примитив long. Это сделает ваш код более четким и понятным.

Как сказал в своем комментарии Элиот Фриш, если это для измерения прошедшего времени, вы можете предпочесть более высокое разрешение System.nanoTime().

Если вам нужно нужны миллисекунды с начала эпохи

Предполагая, что у вас есть веские причины требовать отсчета миллисекунд с начала эпохи,…

какая из нихРекомендуется: Instant.now().toEpochMilli() или System.currentTimeMillis() [?]

Мнения расходятся. Некоторые скажут, что вы должны использовать java.time, современный API даты и времени, для всей вашей работы с датой и временем. Это будет означать Instant здесь. Unsg java.time, как правило, хорошая привычка, поскольку классы даты и времени из Java 1.0 и 1.1 (Date, Calendar, TimeZone, DateFormat, SimpleDateFormat и другие) плохо разработаны и в настоящее время устарели, конечно, не то, что мы должны использовать больше. С другой стороны, мне не известно о каких-либо проблемах проектирования с System.curremtTimeMillis(), в частности (за исключением того, что я упомянул выше об использовании числа long в миллисекундах вообще, что очевидно присуще Instant.now().toEpochMilli() и System.currentTimeMillis()).

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

Выберите вариант, который вы считаете более читабельным и менее удивительным в своемконтекст.

1 голос
/ 05 ноября 2019

Насколько я понимаю, Instant.now().toEpochMilli() лучше, так как Java-8 и далее рекомендуется использовать Instant.

Кроме того, он работает на основе временной шкалы, а момент времени представляет определенный момент на этой временной шкале.

В случае использования метода java.lang.System.currentTimeMillis() он возвращает текущее время в миллисекундах. Степень детализации значения зависит от базовой операционной системы и может быть больше.

Следовательно, для согласованности в целом используйте Instant.

...