Построить дату - эффективный способ - PullRequest
14 голосов
/ 04 марта 2010

Могу ли я узнать, как наиболее эффективно построить объект даты, используя определенный день, месяц и год.

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), не говоря об остальном?

Пожалуйста, не предлагайте использовать сторонние библиотеки.

Ответы [ 4 ]

18 голосов
/ 04 марта 2010

С этим вы можете избежать ненужного создания экземпляра "сейчас".

Date coolDate = new GregorianCalendar(year, month, day).getTime();

Вы можете проверить javadoc GregorianCalendar для других конструкторов. У вас есть дата + время и часовой пояс.

В любом случае, я согласен с Джоном Скитом, что это не так дорого. Я согласен с вами, что для кода не требуется инициализация по умолчанию "сейчас".

8 голосов
/ 04 марта 2010

«Довольно дорого» несколько расплывчато. Вы на самом деле пытались использовать предоставленный вами код, измерили его и обнаружили, что он стоит слишком дорого? У вас есть конкретное представление о том, насколько дешевой должна быть эта операция?

Кроме того, вы не указали, какой часовой пояс вы хотите, чтобы значение в Date представляло. УНИВЕРСАЛЬНОЕ ГЛОБАЛЬНОЕ ВРЕМЯ? Часовой пояс по умолчанию? В какое время суток вы хотите, чтобы это было - полночь или текущее время суток? Ваш текущий код сохранит текущее время суток - это действительно то, что вы хотите?

(Как я упоминал в комментарии, я настоятельно рекомендую вам перейти на Joda Time - но даже если вы этого не сделаете, вам все равно следует проверить, действительно ли у вас возникла проблема с существующим кодом, прежде чем искать решение.)

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

Я бы просто сделал это:

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date thisDate = formatter.parse("2010-03-04");

Это довольно эффективно с точки зрения кода; Я не могу говорить о его эффективности во время работы с Календарем.

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

Что бы вы ни использовали, пока оно находится в API Java Standard, оно будет включать использование Calendar (и конструктор Date, и SimpleDateFormat используют его внутри), так что нет смысла беспокоиться об этом классе Предполагаемая неэффективность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...