Как рассчитать дату для 00:00:00 утра сегодняшнего дня? - PullRequest
7 голосов
/ 22 июня 2010

Мне нужно рассчитать java.util.Date для начала сегодняшнего дня (00:00:00 утра сегодняшнего дня). Кто-нибудь знает что-то лучше, чем сброс полей java.util.Calendar:

Calendar cal = Calendar.getInstance();
cal.set(Calendar.AM_PM, Calendar.AM);
cal.set(Calendar.HOUR, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);

Ответы [ 7 ]

7 голосов
/ 22 июня 2010

Если вы не беспокоитесь о часовых поясах, то ваше решение в порядке. В противном случае стоит посмотреть на JodaTime.

Если вы в конечном итоге решите перейти на JodaTime, вы можете использовать DateMidnight класс, который должен использоваться в вашей ситуации.

4 голосов
/ 22 июня 2010

Следующий код вернет объект календаря текущей даты со временем 00: 00: 00

Calendar current = Calendar.getInstance();
current.set(current.get(Calendar.YEAR),current.get(Calendar.MONTH),current.get(Calendar.DATE),0,0,0);

Он не будет учитывать значения часового пояса и будет практически таким же, как ваш код.Разница лишь в том, что все сбрасывается до 0 в одной строке.

2 голосов
/ 09 августа 2012

Это решение может быть лучше, так как не использует тяжелый элемент Java Calender

public class DateTest {
    public static void main(String[] args) {
       SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
    long time = dateFormat.parse(dateFormat.format(new Date())).getTime();
    System.out.println("todays start date : " + new Date(time));
    }
}
1 голос
/ 13 февраля 2011

С библиотекой date4j :

DateTime start = dt.getStartOfDay();
1 голос
/ 22 июня 2010

Я нахожусь в одной лодке, и вы предоставили мне то, как я это делаю. У меня есть это в DateUtil.stripToMidnight(...) функции ...

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

Возможно, есть способ сделать это в JodaTime, но я об этом не знаю.

0 голосов
/ 17 мая 2017

Начиная с java8 это можно сделать следующим образом, если вы не заботитесь о часовом поясе

LocalDateTime localDateTime = LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT);
Date midnight = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
0 голосов
/ 22 июня 2010

Еще один вариант без дополнительных библиотек:

import java.sql.Date;

public class DateTest {
    public static void main(String[] args) {
        long MS_PER_DAY = 24L * 60 * 60 * 1000;
        long msWithoutTime = (System.currentTimeMillis() / MS_PER_DAY) * MS_PER_DAY;
        Date date = new Date( msWithoutTime );
        System.out.println( date.toGMTString());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...