2012-05-16 2 views
0

Дата ввода пользователем используется для выпадания отдельно для дня, месяца и года. Мне нужно сравнить введенную вами дату с сегодняшней датой и проверить, является ли это днем ​​или днем. Я немного смущен о временной части, потому что меня не интересует время, просто дата. Как решить это без использования класса Date (я читал, что не рекомендуется использовать класс Date).Сравнение дат с использованием класса Calendar с использованием java

Спасибо.

+1

возможно дубликат [Сравнение двух дат в Java] (HTTP: // StackOverflow.com/questions/3144387/compare-two-dates-in-java) – Andrew

ответ

6

Сначала нужно создать GregorianCalendar экземпляр, представляющий введенную дату:

Calendar user = new GregorianCalendar(2012, Calendar.MAY, 17); 

И один для «сейчас»:

Calendar now = new GregorianCalendar(); 

Это даст положительное значение, если дата в будущем, и отрицательные - если в прошлом:

user.compareTo(now); 

Несколько заметок о строительстве user объекта:

  • использует текущее время JVM зону, так что в моем случае это полночь 17 мая в часовом поясе CEST
  • быть осторожным с месяцами, они-на основе
+0

+1 Интересно, я не знал, что сравнивать это сделаем. Отличный ответ! – ChadNC

0

Попробуйте это решение:

int day = 0; //user provided 
    int month = 0; //user provided 
    int year = 0; //user provided 
    Calendar calendar = Calendar.getInstance(); 
    calendar.set(Calendar.YEAR, year); 
    calendar.set(Calendar.MONDAY, month); 
    calendar.set(Calendar.DAY_OF_MONTH, day); 
    long millisUser = calendar.getTime().getTime(); 
    long nowMillis = System.currentTimeMillis(); 
    if(nowMillis < millisUser) { 
     ... 
    } 

Вышеуказано, есть ли дата в будущем.

Там нет ничего плохого в использовании java.util.Date Вы можете использовать:

int day = 0; //user provided 
    int month = 0; //user provided 
    int year = 0; //user provided 
    Calendar calendar = Calendar.getInstance(); 
    calendar.set(Calendar.YEAR, year); 
    calendar.set(Calendar.MONDAY, month); 
    calendar.set(Calendar.DAY_OF_MONTH, day); 
    Date userSubmit = calendar.getTime(); 
    Date now = new Date(); 
    if(userSubmit.after(now)) { 
     ... 
    } 

Но если вы хотите свободно, простой и интуитивно понятный API с датами я рекомендую использовать JodaTime

0

Использовать григорианский календарь. Если вы хотите узнать разницу дней между двумя датами, тогда вы можете сделать метод, похожий на следующий.

public int getDays(GregorianCalendar g1, GregorianCalendar g2) { 
    int elapsed = 0; 
    GregorianCalendar gc1, gc2; 
    if (g2.after(g1)) { 
    gc2 = (GregorianCalendar) g2.clone(); 
    gc1 = (GregorianCalendar) g1.clone(); 
    } 
    else { 
    gc2 = (GregorianCalendar) g1.clone(); 
    gc1 = (GregorianCalendar) g2.clone(); 
    } 
    gc1.clear(Calendar.MILLISECOND); 
    gc1.clear(Calendar.SECOND); 
    gc1.clear(Calendar.MINUTE); 
    gc1.clear(Calendar.HOUR_OF_DAY); 
    gc2.clear(Calendar.MILLISECOND); 
    gc2.clear(Calendar.SECOND); 
    gc2.clear(Calendar.MINUTE); 
    gc2.clear(Calendar.HOUR_OF_DAY); 
    while (gc1.before(gc2)) { 
    gc1.add(Calendar.DATE, 1); 
    elapsed++; 
    } 
    return elapsed; 

}

Это вернет вам разницу в количестве дней.

2

Попробуйте класс DateUtils библиотеки Apache Commons Lang.

Этот класс предоставляет метод truncatedEquals (cal1, cal2, field).

Таким образом, вы можете проверить на равенство с одной строки кода:

Calendar user = new GregorianCalendar(2012, Calendar.MAY, 17); 
Calendar now = Calendar.getInstance(); 

if(DateUtils.truncatedEquals(user, now, Calendar.DATE)){ 
    // your code goes here 
} 
1

Простой расчет:

GregorianCalendar gc1 = new GregorianCalendar(); 
GregorianCalendar gc2 = new GregorianCalendar(); 
gc2.add(GregorianCalendar.DAY_OF_MONTH, 2); // gc2 is 2 days after gc1 
long duration = (gc2.getTimeInMillis() - gc1.getTimeInMillis()) 
         /(1000 * 60 * 60 * 24) ; 
System.out.println(duration); 

-> 2

Смежные вопросы