比较Java中的日期

我已经阅读了日期函数,但我不能想出解决问题的最佳方法。

我有几个数据库的日期是String ,我想将它与当前日期进行比较。 我正在使用compareTo ,但使用此函数时出现问题我猜是因为我正在比较字符串。

这是我的function:

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

当我在样本日期使用它时:

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

它返回1,当我将第一个参数的值更改为"04/20/2013"它仍然返回1。

请帮忙…

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并beforeafter使用…

 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())); 

接近是错误,

 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)); } 

编辑:

修改为多种格式:

 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; } 

这是我用过的最基本的….

 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);