比较日期值

时间:2013-09-05 18:24:40

标签: android date

我使用两个函数来比较日期值,我将检查开始日期是否大于/来自结束日期

第一个函数用于获取字符串值并使用该字符串值初始化Calendar

private int getFromCalendar(String strDate,int field)
    {
        int result = -1;
        try
        {
            SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");// this is your date format "12/24/2013" = "MM/dd/yyy"
            java.util.Date date = formatter.parse(strDate);//convert to date
            Calendar cal = Calendar.getInstance();// get calendar instance
            cal.setTime(date);//set the calendar date to your date
            result = cal.get(field); // get the required field  
            return result;//return the result.
        }
        catch (ParseException e)
        {
            e.printStackTrace();
        }
        return result;
    }

第二个函数用于比较startDate和endDate(它们都是按钮):

public void compareDates(String startDate, String endDate){
            Calendar startCheckDate = Calendar.getInstance();
            int startmm = getFromCalendar(monitoringDate.getText().toString(), Calendar.MONTH);
            int startyy = getFromCalendar(monitoringDate.getText().toString(), Calendar.YEAR);
            int startdd = getFromCalendar(monitoringDate.getText().toString(), Calendar.DAY_OF_MONTH);
            startCheckDate.set(startyy, startmm, startdd);
            Calendar endCheckDate = Calendar.getInstance();
            int endmm = getFromCalendar(monitoringEndDate.getText().toString(), Calendar.MONTH);
            int endyy = getFromCalendar(monitoringEndDate.getText().toString(), Calendar.YEAR);
            int enddd = getFromCalendar(monitoringEndDate.getText().toString(), Calendar.DAY_OF_MONTH); 
            endCheckDate.set(endyy, endmm, enddd);

            if(endCheckDate.after(startCheckDate)){
                Toast.makeText(getSherlockActivity(), "End date cannot be smaller than start date", Toast.LENGTH_SHORT).show();
            }

        }

由于某种原因,compareDates功能根本不起作用。请帮忙

3 个答案:

答案 0 :(得分:3)

您可以通过将日期更改为自1900年以来的毫秒来轻松比较日期

Date date = new Date();
long dateLong = date.getTime();

现在很容易与其他任何日期进行比较

因此,对于您的情况,这样做后回到日期DataType

SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");// this is your date format "12/24/2013" = "MM/dd/yyy"
java.util.Date date = formatter.parse(strDate);

做类似

的事情
long date1long = date1.getTime();

long date2long = date2.getTime();


if(date2long > date1long)
{
   // Do whatever you want
}

这是比较两个日期的最简单方法

答案 1 :(得分:1)

你是详细的。因为您只想知道给定日期是否在另一个之后。你走了:

public class DateTest {
    private static SimpleDateFormat formatter = new SimpleDateFormat(
            "MM/dd/yyyy");

    public static void main(String[] args) throws ParseException {
        Calendar start = createFromString("01/30/2013");
        Calendar end = createFromString("06/30/2013");

        System.out.println("START: " + start.getTime());
        System.out.println("END  : " + end.getTime());
        System.out.println("IS B4: " + isBefore(start, end));
    }

    public static Calendar createFromString(String date) throws ParseException {
        Calendar c = Calendar.getInstance();
        c.setTime(formatter.parse(date));
        return c;
    }

    public static boolean isBefore(Calendar start, Calendar end) {
        return start.before(end);
    }
}

<强>输出

  

START:2013年1月30日星期三00:00:00 CET 2013年    结束:Sun Jun 30 00:00:00 CEST 2013
   IS B4:是的

我在getTime()方法中使用了println(),因为toString()上的java.util.Date方法(被隐式调用)比Calendar中的方法更具人性化}}

日历中还有after()compareTo()

答案 2 :(得分:0)

在compareDates()中使用

if(endCheckDate.compareTo(startCheckDate)<0)

而不是

if(endCheckDate.after(startCheckDate))

了解更多参考资料go here