System.currentTimeMillis () по сравнению с новой Датой () по сравнению с Calendar.getInstance () .getTime ()

В Java, каковы производительность и последствия ресурса использования

System.currentTimeMillis() 

по сравнению с.

new Date() 

по сравнению с.

Calendar.getInstance().getTime()

Насколько я понимаю, System.currentTimeMillis() является самым эффективным. Однако в большинстве приложений, то длинное значение должно было бы быть преобразовано в Дату или некоторый подобный объект, чтобы сделать что-либо значимое для людей.

230
задан Vihung 1 July 2019 в 03:55
поделиться

5 ответов

System.currentTimeMillis(), очевидно, большинство эффективный , так как это даже не создает объект, но new Date() действительно просто тонкая обертка о длинном, таким образом, это не далеко позади. Calendar, с другой стороны, является относительно медленным и очень сложным, так как это должно иметь дело со значительно сложность и все причуды, которые свойственны к датам и времени (високосные годы, переход на летнее время, часовые пояса, и т.д.).

Это - обычно хорошая идея иметь дело только с долгими метками времени или Date объекты в рамках Вашего приложения, и только использовать Calendar, когда на самом деле необходимо выполнить вычисления даты/времени, или отформатировать даты отображения их пользователю. Если необходимо сделать многое из этого, с помощью , Время Joda является, вероятно, хорошей идеей для более чистой интерфейсной и лучшей производительности.

235
ответ дан ROMANIA_engineer 23 November 2019 в 03:41
поделиться

Рассмотрение JDK, у самого внутреннего конструктора для Calendar.getInstance() есть это:

public GregorianCalendar(TimeZone zone, Locale aLocale) {
    super(zone, aLocale);
    gdate = (BaseCalendar.Date) gcal.newCalendarDate(zone);
    setTimeInMillis(System.currentTimeMillis());
}

, таким образом, это уже автоматически делает то, что Вы предлагаете. Конструктор по умолчанию даты содержит это:

public Date() {
    this(System.currentTimeMillis());
}

, Таким образом, действительно нет потребности получить системное время конкретно, если Вы не хотите сделать некоторую математику с ним прежде, чем создать Ваш объект Календаря/Даты с ним. Также я действительно должен рекомендовать joda-разовый использовать в качестве замены для собственных классов календаря/даты Java, если Ваша цель состоит в том, чтобы работать с вычислениями даты много.

42
ответ дан Esko 23 November 2019 в 03:41
поделиться

Если Вы ИСПОЛЬЗУЕТЕ дату тогда, я настоятельно рекомендую использовать jodatime, http://joda-time.sourceforge.net/ . Используя System.currentTimeMillis() для полей, которые являются , даты походят на очень плохую идею, потому что Вы закончите с большим количеством бесполезного кода.

И дата и календарь серьезно borked, и Календарь является определенно худшим исполнителем их всех.

я советовал бы Вам использовать System.currentTimeMillis(), когда Вы на самом деле действуете с миллисекундами, например, как это

 long start = System.currentTimeMillis();
    .... do something ...
 long elapsed = System.currentTimeMillis() -start;
22
ответ дан ROMANIA_engineer 23 November 2019 в 03:41
поделиться

Я предпочитаю использовать значение, возвращенное System.currentTimeMillis() для всех видов вычислений, и только использую Calendar или Date, если я должен действительно отобразить значение, которое читается людьми. Это также предотвратит 99% Ваших ошибок летнего времени.:)

12
ответ дан Bombe 23 November 2019 в 03:41
поделиться

В зависимости от Вашего приложения можно хотеть рассмотреть использование System.nanoTime() вместо этого.

7
ответ дан MykennaC 23 November 2019 в 03:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: