1

我正在使用两个函数来比较日期值,我将在其中检查start date是否大于/晚于end 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功能根本不起作用。请帮忙

4

3 回答 3

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
}

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

于 2013-09-05T18:37:20.117 回答
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);
    }
}

输出

开始:2013 年 1 月 30 日星期三 00:00:00 CET
结束:2013 年 6 月 30 日星期日 00:00:00 CEST
是 B4:真

getTime()在该方法中使用了该println()方法,因为该toString()方法(被隐式调用)java.util.DateCalendar.

还有一个after()in Calendar 和一个compareTo().

于 2013-09-05T18:37:40.097 回答
0

在 compareDates() 中使用

if(endCheckDate.compareTo(startCheckDate)<0)

代替

if(endCheckDate.after(startCheckDate))

如需更多参考,请点击此处

于 2013-09-05T18:36:06.020 回答