2013-04-18 6 views
0

Я уже прочитал функции даты, но я не могу думать, что это лучший способ решить мою проблему.Сравнение дат в Java

У меня есть пара дат из базы данных, которая равна String, и я хочу сравнить ее с текущей датой. Я использую compareTo, но есть проблема с использованием этой функции, я думаю, это из-за того, что я сравнивал строки.

Это моя функция:

public int dateCompare(String today, String date2){ 
    return today.compareTo(date2); 
} 

И когда я использую его в типовых дат:

dateCompare("04/19/2013","04/18/2013"); 

возвращает 1, и, когда я изменить значение первого параметра "04/20/2013" он все еще возвращается 1.

Пожалуйста ПОМОГИТЕ ...

+1

как насчет класса даты? –

+2

'' 04/18/2013 «' не 'Date', это' String' – MadProgrammer

+0

Преобразование строк в объекты Date, а затем сравнение. –

ответ

0

Java имеет Date объект. Вы должны использовать это вместо этого.

import java.util.Calendar; 
import java.util.Date; 

public class CompareDates { 

    public static void main(String[] args) { 
     // Create a calendar, this will default to today 
     Calendar cal = Calendar.getInstance(); 
     // Subtract 1 day 
     cal.add(Calendar.DATE, -1); 
     // Compare the result (1) 
     System.out.println(dateCompare(new Date(), cal.getTime())); 
     // Add 2 days 
     cal.add(Calendar.DATE, 2); 
     // Compare the result (-1) 
     System.out.println(dateCompare(new Date(), cal.getTime()));    
    } 

    public static int dateCompare(Date today, Date date2) { 
     System.out.println("Compare " + today + " with " + date2); 
     return today.compareTo(date2); 
    } 
} 

Вы также можете просто использовать в Date API и использовать before и after ...

Date now = new Date(); 

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.DATE, -1); 
System.out.println(now + " isBefore " + cal.getTime() + " = " + now.before(cal.getTime())); 
System.out.println(now + " isAfter " + cal.getTime() + " = " + now.after(cal.getTime())); 
cal.add(Calendar.DATE, 2); 
System.out.println(now + " isBefore " + cal.getTime() + " = " + now.before(cal.getTime())); 
System.out.println(now + " isAfter " + cal.getTime() + " = " + now.after(cal.getTime())); 
5

Неисправность в подходе,

public int dateCompare(String today, String date2){ 
    return today.compareTo(date2); 
} 

Вы рассматриваете это как dateComparison, но посмотрите на аргументы метода, String, String.

Итак, вы фактически сравниваете две строки.

Вы должны быть сначала преобразовать эти строки на сегодняшний день ...

Мол,

public Date parseDate(String dateStr) { 
    DateFormat df = new SimpleDateFormat("MM/dd/yyyy"); 
    return df.parse (dateStr); 
} 

public int dateCompare(String today, String date2){ 
    return (parseDate(today)).compareTo(parseDate(date2)); 
} 

EDIT:

Modified для нескольких форматов:

public Date parseDate(String dateStr, String parsingFormat) throws SomeParsingException { 
    DateFormat df = new SimpleDateFormat("MM/dd/yyyy"); 
    return df.parse (dateStr); 
} 

public Date parseDate (String dateStr) throws SomeException { 
    Date d1 = null; 
    try { 
     d1 = parseDate(dateStr, "MM/dd/yyyy"); 
    } catch (SomeParsingException ex) { 
     try { 
      d1 = parseDate(dateStr, "MM-dd-yyyy"); 

     } catch (SomeParsingException ex) { 
      try { 
       d1 = parseDate(dateStr, "MM.dd.yyyy"); 
      } catch(SomeParsingException ex) { 
       throw SomeException ("Unparseable date"); 
      } 
     } 
    } 
    return d1; 
} 
+0

большое спасибо. У меня есть другой вопрос, формат дат из базы данных несовместим. Есть ли функция java для преобразования всего формата в «MM/dd/yyyy». Это другой формат, который у меня есть: «MM/dd/yyyy», «MM.dd.yyyy», «MM-dd-yyyy» – eurica

+0

Я предполагаю, что ваша база данных возвращает строки вместо дат. Так что это своего рода несогласованность данных. Теперь, чтобы контролировать его, если вы можете изменить таблицу, я предполагаю изменить ее тип на Date или DateTime и перенести данные.Еще при извлечении данных из базы данных запишите его в дату. Еще раз посмотрим на мой измененный ответ. –

0

Это это quikest я использовал ....

Calendar cal1 = Calendar.getInstance(); 
Calendar cal2 = Calendar.getInstance(); 
cal1.setTime(date1); 
cal2.setTime(date2); 
boolean sameDay = cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) && cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR); 
+0

FYI: класс «Календарь» является частью проблемных старых классов времени, которые теперь являются устаревшими, вытесняются классами java.time. –