0

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

我有几个来自数据库的日期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。

请帮忙...

4

3 回答 3

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

编辑 :

修改为多种格式:

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;
}
于 2013-04-18T04:26:45.963 回答
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);
    }
}

您也可以只使用DateAPI 并使用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()));
于 2013-04-18T04:23:59.043 回答
0

这是我用过最快的......

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);
于 2017-04-19T16:18:34.450 回答