在android studio上验证两个日期

时间:2015-02-17 21:35:56

标签: android date android-studio calendar method-invocation

我需要验证2个日期,一个是由用户挑选的,另一个是我从日历中得到的...这是我到目前为止尝试的没有成功:

Calendar c = Calendar.getInstance();
if(!DateIsOlder(txtVwAppointmentDate.getText(), c.getTime())) {
            try {
                  //My code
                }  

public static boolean DateIsOlder(CharSequence date1, Date date2){
    //SimpleDateFormat Date2 = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz -HH:mm yyyy", Locale.ENGLISH);
    SimpleDateFormat dfDate = new SimpleDateFormat("dd/mm/yyyy", Locale.ENGLISH);
    boolean isOlder = false;
    try{
        //Date newDate = (Date)Date2.parse(date2);
        if(dfDate.parse(String.valueOf(date1)).before(dfDate.format(date2))){
        isOlder = true;
        }
        else if (dfDate.parse(String.valueOf(date1)).equals(dfDate.format(date2))){
        isOlder = false;
        }
        else {
            isOlder = false;
        }
    }catch (Exception e){
        e.printStackTrace();
    }
    return isOlder;
}

错误在.before(dfDate.format(date2))上,它说: 错误:(484,51)错误:类Date之前的方法无法应用于给定类型; 要求:日期 发现:字符串 reason:实际参数String无法通过方法调用转换转换为Date

如果你可以看到,如果我比较两个日期,如果它们相等并且编译器在这一行上没有显示任何错误,则在else上:

else if (dfDate.parse(String.valueOf(date1)).equals(dfDate.format(date2)))

此外,我尝试将其更改为日期但没有成功...任何想法可以帮助我解决这个问题?感谢。

4 个答案:

答案 0 :(得分:0)

您可以将用户日期转换为时间戳,并可以比较它们。

DateFormat formatter = new SimpleDateFormat("MM-dd-yyyy");
Date date = (Date)formatter.parse(str_date); 
Timestamp timeStamp = new TimeStamp(date);

答案 1 :(得分:0)

不要使用java.util.Date。谷歌说以下关于日期:

  

这堂课'不再使用与显示相关的功能,现在由DateFormat提供,此类'现已提供已弃用的计算功能。

换句话说,它已被弃用。您应该使用DateFormat,您可以在这里阅读更多信息:http://developer.android.com/reference/java/text/DateFormat.html

要进行日期比较,您需要制作两个不同的Calendar对象并调用before()或after()

答案 2 :(得分:0)

你的问题是dfDate.format(date2)返回一个String而不是Date对象,所以你需要将你的方法变为:

    public static boolean DateIsOlder(CharSequence date1, Date date2){
    SimpleDateFormat dfDate = new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH);
    boolean isOlder = false;

    try{
        if(dfDate.parse(String.valueOf(date1)).before(dfDate.parse(dfDate.format(date2)))){
            isOlder = true;
        }
        else {
            isOlder = false;
        }
    }catch (Exception e){
        e.printStackTrace();
    }
    return isOlder;
}

答案 3 :(得分:0)

非常感谢帮助我找到解决方案的所有人,我尝试使用简单的方法并且它有效,我不需要所有信息calendar.getTime带来所以我做以下事情:

Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH) + 1;
        int day = c.get(Calendar.DAY_OF_MONTH);
        if(!DateIsOlder(txtVwAppointmentDate.getText(), month + "/" + day + "/" + year)) {
            try { //my code }

public static boolean DateIsOlder(CharSequence date1, String date2){
    SimpleDateFormat dfDate = new SimpleDateFormat("MM/dd/yyyy");
    boolean isOlder = false;
    try{
        //Date newDate = (Date)Date2.parse(date2);
        if(dfDate.parse(String.valueOf(date1)).before(dfDate.parse(date2))){
            isOlder = true;
        }
        else {
            isOlder = false;
        }
    }catch (Exception e){
        e.printStackTrace();
    }
    return isOlder;
}

它没有任何问题!谢谢大家:))