Как я могу получить дату без времени в Java? - PullRequest
215 голосов
/ 19 февраля 2011

Продолжение вопроса о переполнении стека Java-программа для получения текущей даты без отметки времени :

Какой самый эффективный способ получения объекта Date без времени?Есть ли какой-нибудь другой способ, кроме этих двух?

// Method 1
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date dateWithoutTime = sdf.parse(sdf.format(new Date()));

// Method 2
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
dateWithoutTime = cal.getTime();

Обновление :

  1. Я знал о Joda-Time ;Я просто пытаюсь избежать дополнительной библиотеки для такой простой (я думаю) задачи.Но, основываясь на ответах, пока Joda-Time кажется чрезвычайно популярным, поэтому я мог бы рассмотреть его.

  2. По по эффективности , я имею в виду, я хочу избежать временного объекта String создание, используемое method 1, в то время как method 2 похоже на взлом вместо решения.

Ответы [ 22 ]

0 голосов
/ 20 февраля 2018

Йо может использовать время йода.

private Date dateWitoutTime(Date date){
 return new LocalDate(date).toDate()
}

и вы звоните с:

Date date = new Date();
System.out.println("Without Time = " + dateWitoutTime(date) + "/n  With time = " + date);
0 голосов
/ 20 августа 2013

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

  /*
    Return values:
    -1:    Date1 < Date2
     0:    Date1 == Date2
     1:    Date1 > Date2

    -2:    Error
*/
public int compareDates(Date date1, Date date2)
{
    SimpleDateFormat sdf = new SimpleDateFormat("ddMMyyyy");

    try
    {
        date1 = sdf.parse(sdf.format(date1));
        date2 = sdf.parse(sdf.format(date2));
    }
    catch (ParseException e) {
        e.printStackTrace();
        return -2;
    }

    Calendar cal1 = new GregorianCalendar();
    Calendar cal2 = new GregorianCalendar();

    cal1.setTime(date1);
    cal2.setTime(date2);

    if(cal1.equals(cal2))
    {
        return 0;
    }
    else if(cal1.after(cal2))
    {
        return 1;
    }
    else if(cal1.before(cal2))
    {
        return -1;
    }

    return -2;
}

Ну, возможно, не использовать GregorianCalendar - это вариант!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...