Дата постройки - эффективный способ
Могу ли я узнать, что является наиболее эффективным способом создания объекта даты с использованием определенного дня, месяца и года.
Date(int year, int month, int day)
Эта конструкция обесценивается. Следовательно, я обычно делаю:
Calendar calendar = Calendar.getInstance();
Date date = calendar.set(year, month, date).getTime();
Однако я понимаю, что Calendar.getInstance() довольно дорогой. Каков наиболее эффективный способ создания объекта Date? Или я должен просто использовать Date (int year, int month, int day) спокойно, не сообщая остальным?
Пожалуйста, не предлагайте использовать стороннюю библиотеку.
Ответы
Ответ 1
С помощью этого вы можете избежать создания инкрементного экземпляра "теперь время".
Date coolDate = new GregorianCalendar(year, month, day).getTime();
Вы можете проверить GregorianCalendar javadoc для других конструкторов. У вас есть дата + время и часовой пояс.
В любом случае я согласен с Джоном Скитом, что это не так дорого. Я согласен с вами, что для кода не требуется инициализация по умолчанию "now".
Ответ 2
"Довольно дорого" несколько расплывчато. Вы действительно пытались использовать код, который вы поставили, измерили и обнаружили, что это слишком дорого? У вас есть конкретное представление о том, насколько дешево вам нужна эта операция?
Кроме того, вы не указали, какой часовой пояс вы хотите представить в Date
. УНИВЕРСАЛЬНОЕ ГЛОБАЛЬНОЕ ВРЕМЯ? Часовой пояс по умолчанию? В какое время вы хотите, чтобы это было - полночь или текущее время суток? Ваш текущий код сохранит существующее время суток - это действительно то, что вы хотите?
(Как я упоминал в комментарии, я настоятельно рекомендую вам перейти на Joda Time - но даже если вы этого не сделаете, вы все равно должны проверить, действительно ли у вас есть проблема с вашим существующим кодом, прежде чем искать решение.)
Ответ 3
Независимо от того, что вы используете, если он используется в стандартном API Java, он будет включать использование Calendar
(как конструктор Date
, так и SimpleDateFormat
использовать его внутри), поэтому нет смысла беспокоиться об этом классе предполагаемая неэффективность.
Ответ 4
Я бы просто сделал это:
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date thisDate = formatter.parse("2010-03-04");
Это довольно эффективно с точки зрения кода; Я не могу говорить о его эффективности во время работы с календарем.