Получить сегодня дату на Java в полночь - программирование
Подтвердить что ты не робот

Получить сегодня дату на Java в полночь

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

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

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

Обновить:

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

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

4b9b3361

Ответ 1

    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 the first second of the day.

должен быть Пт Мар 09 00:00:00 IST 2012

Ответ 2

Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm");
System.out.println(sdf.format(date));

Ответ 3

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

Вот решение на основе 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 с помощью этих преобразований:

LocalDateTimeZonedDateTimeInstantDate

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

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

    Instant i = zdt.toInstant()
    
  • Наконец, вызовите 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());


См. также раздел Legacy Date-Time Code (Учебники Java ™) для взаимодействия новой функциональности java.time с legacy java.util.

Ответ 5

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

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

Ответ 6

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

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

Это будет отображаться как:

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

Ответ 7

private static Date truncateTime(Calendar cal) {
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return new Date(cal.getTime().getTime());
}
 public static void main(String[] args) throws Exception{
        Date d2 = new Date();
        GregorianCalendar cal = new GregorianCalendar();
        cal.setTime(d2);
        Date d1 = truncateTime( cal );
        System.out.println(d1.toString());
        System.out.println(d2.toString());
}

Ответ 8

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

Ответ 9

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

Date pDate = new Date();
DateUtils.truncate(pDate, Calendar.DAY_OF_MONTH);

Ответ 10

Решение в Java 8:

Date startOfToday = Date.from(ZonedDateTime.now().with(LocalTime.MIN).toInstant());

Ответ 11

Определение "Полночь

Слово "полночь" сложно определить.

Некоторые думают об этом как о моменте перед началом нового дня. Попытка представить, что в программном обеспечении так сложно, как последний момент дня, всегда можно подразделить на меньшую часть секунды.

Я предлагаю лучше подумать об этом, чтобы получить "первый момент дня".

Это поддерживает широко используемый подход определения промежутка времени как "Half-Open", где начало включено, в то время как окончание является эксклюзивным. Таким образом, полный день начинается с первого момента дня и заканчивается, но не включает, первый момент следующего дня. Полный день понравится (обратите внимание на дату, начиная с 3-го по 4-й):

2016-02-03T00: 00: 00.0-08: 00 [Америка/Los_Angeles]/2016-02-04T00:00:00.0-08:00 [Америка/Los_Angeles]

Joda времени

Если вы используете библиотеку Joda-Time, вызовите withTimeAtStartOfDay.

Обратите внимание, как мы указываем часовой пояс. Если этот параметр опущен, неявно применяется текущий часовой пояс JVMs по умолчанию. Лучше быть явным.

DateTime todayStart = DateTime.now( DateTimeZone.forID( "America/Montreal" ) ).withTimeAtStartOfDay() ;

Если вы используете Java 8 или новее, лучше использовать пакет java.time, встроенный в Java. См. ответ от сестры от Йенса Хоффмана.