Java-программа для получения текущей даты без отметки времени - PullRequest
14 голосов
/ 11 мая 2010

Мне нужна программа на Java, чтобы получить текущую дату без отметки времени :

Date d = new Date();

дает мне дату и время.

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

На печати

System.out.println("Current Date : " + d)

of d должно вывести May 11 2010 - 00:00:00.

Ответы [ 17 ]

37 голосов
/ 11 мая 2010

A java.util.Date объект является своего рода отметкой времени - она ​​содержит количество миллисекунд с 1 января 1970 года, 00:00:00 UTC. Таким образом, вы не можете использовать стандартный Date объект, содержащий только день / месяц / год без времени.

Насколько я знаю, нет действительно простого способа сравнить даты, принимая во внимание только дату (а не время) в стандартном Java API. Вы можете использовать класс Calendar и очистить часы, минуты, секунды и миллисекунды:

Calendar cal = Calendar.getInstance();
cal.clear(Calendar.HOUR_OF_DAY);
cal.clear(Calendar.AM_PM);
cal.clear(Calendar.MINUTE);
cal.clear(Calendar.SECOND);
cal.clear(Calendar.MILLISECOND);

Сделайте то же самое с другим объектом Calendar, который содержит дату, с которой вы хотите сравнить ее, и используйте методы after() или before() для сравнения.

Как объяснено в Javadoc java.util.Calendar.clear (int field) :

Поля HOUR_OF_DAY , HOUR и AM_PM обрабатываются независимо, и применяется правило разрешения для времени суток. Очистка одного из полей не сбрасывает значение часа в календаре. Используйте set (Calendar.HOUR_OF_DAY, 0) для сброса значения часа.

edit - Ответ выше с 2010 года; в Java 8 есть новый API даты и времени в пакете java.time, который намного более мощный и полезный, чем старые классы java.util.Date и java.util.Calendar. Используйте новые классы даты и времени вместо старых.

11 голосов
/ 11 мая 2010

Вы всегда можете использовать apache commons 'DateUtils class. Он имеет статический метод isSameDay(), который «проверяет, находятся ли два объекта даты в один и тот же день, игнорируя время».

static boolean isSameDay(Date date1, Date date2) 
8 голосов
/ 21 февраля 2014

Используйте DateFormat для решения этой проблемы:

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
DateFormat dateFormat2 = new SimpleDateFormat("MM-dd-yyyy");
print(dateFormat.format(new Date()); // will print like 2014-02-20
print(dateFormat2.format(new Date()); // will print like 02-20-2014
7 голосов
/ 18 сентября 2012

Я сделал следующее, и это сработало: (текущая дата без отметки времени)

SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
Date today = dateFormat.parse(dateFormat.format(new Date()));
4 голосов
/ 11 мая 2010

Вы можете использовать

// Format a string containing a date.
import java.util.Calendar;
import java.util.GregorianCalendar;
import static java.util.Calendar.*;

Calendar c = GregorianCalendar.getInstance();
String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);
// -> s == "Duke's Birthday: May 23, 1995"

Ознакомьтесь с Formatter документацией API .

4 голосов
/ 18 сентября 2012

Вы можете получить к этой дате:

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
print(dateFormat.format(new Date());
3 голосов
/ 11 мая 2010
  DateFormat dateFormat = new SimpleDateFormat("MMMM dd yyyy");
  java.util.Date date = new java.util.Date();
  System.out.println("Current Date : " + dateFormat.format(date));
2 голосов
/ 14 июля 2014

Также вы можете использовать apache commons lib DateUtils.truncate():

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

Время будет установлено на 00:00:00, чтобы вы могли работать с этой датой или распечатать ее в формате:

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

System.out.println(dateFormat.format(now);        // 2010-05-11 11:32:47
System.out.println(dateFormat.format(truncated);  // 2010-05-11 00:00:00
1 голос
/ 21 февраля 2014

Ответ принятый Джеспером правильный, но сейчас устарел. Классы java.util.Date и .Calendar печально известны своими проблемами. Избежать их.

java.time

Вместо этого используйте java.time framework, встроенный в Java 8 и более поздние версии, с обратным портированием на Java 6 & 7 и , дополнительно адаптированный к Android .

Если вы действительно не заботитесь о времени суток и часовых поясах, используйте LocalDate в фреймворке java.time ().

LocalDate localDate = LocalDate.of( 2014 , 5 , 6 );

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

Вызовите toString для генерации строки в стандартном ISO 8601 формате.

String output = localDate.toString();

2014-05-06

Для других форматов выполните поиск переполнения стека для DateTimeFormatter класса.

Joda-Time

Хотя теперь его заменяет java.time, вы можете использовать аналогичный класс LocalDate в библиотеке Joda-Time (источник вдохновения для java.time).

LocalDate localDate = new LocalDate( 2014, 5, 6 );
1 голос
/ 08 марта 2012
private static final DateFormat df1 = new SimpleDateFormat("yyyyMMdd"); 
    private static Date NOW = new Date();
    static {
        try {
            NOW = df1.parse(df1.format(new Date()));
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...