System.currentTimeMillis()
Очевидно, он наиболее эффективен, поскольку он даже не создает объект, но new Date()
на самом деле является просто тонкой оберткой для длинных, поэтому он не сильно отстает. Calendar
с другой стороны, он относительно медленный и очень сложный, поскольку имеет дело со значительной сложностью и всеми странностями, присущими датам и временам (високосные годы, летнее время, часовые пояса и т. д.).
Как правило, рекомендуется иметь дело только с длинными метками времени или Date
объектами в вашем приложении и использовать их только Calendar
тогда, когда вам действительно необходимо выполнить вычисления даты / времени или отформатировать даты для их отображения пользователю. Если вам приходится много делать, возможно, Joda Time - хорошая идея для более чистого интерфейса и лучшей производительности.
Глядя на JDK, самый внутренний конструктор для
Calendar.getInstance()
этого имеет:поэтому он автоматически делает то, что вы предлагаете. Конструктор даты по умолчанию содержит это:
Таким образом, действительно нет необходимости получать системное время специально, если только вы не захотите поработать с ним перед созданием объекта Calendar / Date. Также я должен порекомендовать joda-time для замены собственных классов календаря / даты в Java, если ваша цель - много работать с вычислениями даты.
источник
Если вы ИСПОЛЬЗУЕТЕ свидание, тогда я настоятельно рекомендую вам использовать jodatime, http://joda-time.sourceforge.net/ . Использование
System.currentTimeMillis()
для полей, которые являются датами, звучит как очень плохая идея, потому что в итоге вы получите много бесполезного кода.И дата, и календарь серьезно сорваны, и Календарь, безусловно, худший из всех.
Я бы посоветовал вам использовать,
System.currentTimeMillis()
когда вы на самом деле работаете с миллисекундами, например, вот такисточник
Я предпочитаю использовать значение, возвращаемое
System.currentTimeMillis()
для всех видов вычислений, и использовать толькоCalendar
илиDate
если мне нужно действительно отобразить значение, которое читают люди. Это также предотвратит 99% ваших ошибок при переходе на летнее время. :)источник
На моей машине я попытался проверить это. Мой результат:
Не забывайте о GC (если вы используете
Calendar.getInstance()
илиnew Date()
)источник
В зависимости от вашего приложения, вы можете рассмотреть возможность использования
System.nanoTime()
вместо.источник
nanoTime
возвращается, является относительным (обычно к началу программы) и будет бессмысленным, если вы попытаетесь превратить его в дату.Я попробовал это:
И результат был:
Дата (): 199
currentTimeMillis (): 3
источник
System.currentTimeMillis()
очевидно, самый быстрый, потому что это только один вызов метода и сборщик мусора не требуется.источник