Получить сегодняшнюю дату на Яве в полночь - PullRequest
50 голосов
/ 09 марта 2012

Мне нужно создать два объекта даты. Если текущая дата и время 9 марта 2012 г. 11:30, то

  • дата d1 должна быть 9 марта 2012 г., 12:00
  • объект даты d2 должен содержать саму текущую дату

Дата не будет введена, это системная дата.

Обновление :

Date dt = new Date();
System.out.print(dt.toString());

дает текущую дату и время

Ответы [ 12 ]

56 голосов
/ 09 марта 2012
    Calendar c = new GregorianCalendar();
    c.set(Calendar.HOUR_OF_DAY, 0); //anything 0 - 23
    c.set(Calendar.MINUTE, 0);
    c.set(Calendar.SECOND, 0);
    Date d1 = c.getTime(); //the midnight, that's the first second of the day.

должно быть пт мар 09 00:00:00 IST 2012

33 голосов
/ 09 марта 2012
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm");
System.out.println(sdf.format(date));
13 голосов
/ 28 июля 2015

Вот решение на основе Java 8, использующее новый java.time пакет ( Tutorial ).

Если вы можете использовать объекты Java 8 в своем коде , используйте LocalDateTime:

LocalDateTime now = LocalDateTime.now(); // current date and time
LocalDateTime midnight = now.toLocalDate().atStartOfDay();


Если вам требуются устаревшие даты, т.е. java.util.Date:

Преобразуйте LocalDateTime, который вы создали выше, в Date, используя следующие преобразования:

LocalDateTime -> ZonedDateTime -> Instant -> Date

  1. Вызовите atZone(zone) с указанным часовым поясом (или ZoneId.systemDefault() для системного часового пояса по умолчанию), чтобы создать объект ZonedDateTime, настроенный для DST при необходимости.

    ZonedDateTime zdt = midnight.atZone(ZoneId.of("America/Montreal"));
    
  2. Позвоните toInstant(), чтобы преобразовать ZonedDateTime в Instant:

    Instant i = zdt.toInstant()
    
  3. Наконец, позвоните Date.from(instant), чтобы преобразовать Instant в Date:

    Date d1 = Date.from(i)
    


В итоге для вас это будет выглядеть примерно так:

LocalDateTime now = LocalDateTime.now(); // current date and time
LocalDateTime midnight = now.toLocalDate().atStartOfDay();
Date d1 = Date.from(midnight.atZone(ZoneId.systemDefault()).toInstant());
Date d2 = Date.from(now.atZone(ZoneId.systemDefault()).toInstant());


См. Также раздел Устаревший код даты и времени (Учебные руководства по Java ™) о совместимости новой функциональности java.time с унаследованными java.util классами.

10 голосов
/ 09 марта 2012
Calendar currentDate = Calendar.getInstance(); //Get the current date
SimpleDateFormat formatter= new SimpleDateFormat("yyyy/MMM/dd HH:mm:ss"); //format it as per your requirement
String dateNow = formatter.format(currentDate.getTime());
System.out.println("Now the date is :=>  " + dateNow);
4 голосов
/ 05 февраля 2013

для текущей даты и времени:

String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());

Это будет показано как:

5 февраля 2013 г. 12:40:24 PM

4 голосов
/ 09 марта 2012

Если вы можете добавить внешние библиотеки в ваш проект. Я бы порекомендовал вам попробовать Joda-time. У него очень умный способ работы с датами.

http://joda -time.sourceforge.net /

2 голосов
/ 22 февраля 2016

Решение в Java 8 :

Date startOfToday = Date.from(ZonedDateTime.now().with(LocalTime.MIN).toInstant());
2 голосов
/ 28 июля 2015

Использование org.apache.commons.lang3.time.DateUtils

Date pDate = new Date();
DateUtils.truncate(pDate, Calendar.DAY_OF_MONTH);
1 голос
/ 21 марта 2018

Вот Java 8 способ получить UTC Midnight in millis

ZonedDateTime utcTime = ZonedDateTime.now(ZoneOffset.UTC);
long todayMidnight = utcTime.toLocalDate().atStartOfDay().toEpochSecond(ZoneOffset.UTC) * 1000;
1 голос
/ 07 марта 2015
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");    
Date date = new Date(); System.out.println(dateFormat.format(date));    //2014/08/06 15:59:4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...