Как установить время для объекта даты в java



Я создал

867   3  

3 ответов:

Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY,17);
cal.set(Calendar.MINUTE,30);
cal.set(Calendar.SECOND,0);
cal.set(Calendar.MILLISECOND,0);

Date d = cal.getTime();

См. Также

можете ли вы показать код, который вы используете для создания объекта Date? В любом случае

new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse("2011-01-01 00:00:00")

я хотел бы внести свой вклад в современное ответа. Это включает в себя использование java.time, современный API даты и времени Java, а не старый Date, ни Calendar за исключением тех случаев, когда нет никакого способа избежать этого.

ваша проблема, скорее всего, действительно проблема часового пояса. Когда это Вт авг 09 00:00:00 Ист 2011 в часовых поясах к западу от Ист полночь еще не достигнуто. Это еще 8 августа. Если, например, ваш API для ввода даты в Excel ожидает UTC, дата будет за день до то, что ты задумал. Я считаю, что реальным и хорошим решением является создание даты-времени 00:00 UTC (или любого часового пояса или смещения, ожидаемого и используемого на другом конце).

    LocalDate yourDate = LocalDate.of(2018, Month.FEBRUARY, 27);
    ZonedDateTime utcDateDime = yourDate.atStartOfDay(ZoneOffset.UTC);
    System.out.println(utcDateDime);

это выводит

2018-02-27T00:00Z

Z означает UTC (думайте об этом как о смещении нуля от часового пояса UTC или Zulu). Еще лучше, конечно, если бы вы могли пройти LocalDate из первой строки кода в Excel. Он не включает время суток, поэтому путаница невозможна. С другой стороны, если вы нужен старомодный Date объект для этого, конвертировать непосредственно перед передачей Date on:

    Date oldfashionedDate = Date.from(utcDateDime.toInstant());
    System.out.println(oldfashionedDate);

на моем компьютере эта печать

Tue Feb 27 01:00:00 CET 2018

не обманывайтесь, это правильно. Мой часовой пояс (по центрально-европейскому времени) находится по смещению +01:00 от мирового в феврале (стандартное время), так 01:00:00 на 00:00:00 по Гринвичу. Это просто Date.toString() захватывая часовой пояс JVMs и используя его для создания строки.

как я могу установить его на что-то как в 5: 30 вечера?

отвечая на ваш прямой вопрос напрямую, если у вас есть ZonedDateTime,OffsetDateTime или LocalDateTime, во всех этих случаях будет выполнить то, что вы просили:

    yourDateTime = yourDateTime.with(LocalTime.of(17, 30));

если yourDateTime был LocalDateTime на 2018-02-27T00:00, теперь 2018-02-27T17:30. Аналогично для других типов, только они включают смещение и часовой пояс тоже в зависимости от обстоятельств.

если у вас была только дата, как в первом фрагменте выше, вы также можете добавить время суток информация к нему:

    LocalDate yourDate = LocalDate.of(2018, Month.FEBRUARY, 27);
    LocalDateTime dateTime = yourDate.atTime(LocalTime.of(17, 30));

для большинства целей вы должны предпочесть добавить время суток в определенном часовом поясе, хотя, например

    ZonedDateTime dateTime = yourDate.atTime(LocalTime.of(17, 30))
            .atZone(ZoneId.of("Asia/Kolkata"));

дает 2018-02-27T17:30+05:30[Asia/Kolkata].

Date и Calendar vs java.time

The Date класс, который вы используете, а также Calendar и SimpleDateFormat используемые в других ответах давно устарели, и SimpleDateFormat в частности, оказалось хлопотно. Во всех случаях современный JAVA date and time API-это так много с ним приятнее работать. Вот почему я хотел дать этот ответ на старый вопрос, который все еще посещается.

ссылки: Oracle Tutorial Date Time, объясняя, как использовать java.time.

Comments

    Ничего не найдено.