-1

我需要验证 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)) 上,它说: Error:(484, 51) error: method before in class Date cannot be applied to given types; 必需:找到的日期:字符串原因:实际参数字符串无法通过方法调用转换转换为日期

如果你能看到,如果我比较两个日期是否相等并且编译器在这一行没有显示任何错误:

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

我也尝试将其更改为 Date 但没有成功......有什么想法可以帮助我解决这个问题吗?谢谢。

4

4 回答 4

0

您的问题是 dfDate.format(date2) 返回一个字符串,而不是 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;
}
于 2015-02-17T22:01:45.303 回答
0

您只需将用户日期转换为时间戳并进行比较即可。

DateFormat formatter = new SimpleDateFormat("MM-dd-yyyy");
Date date = (Date)formatter.parse(str_date); 
Timestamp timeStamp = new TimeStamp(date);
于 2015-02-17T21:51:12.380 回答
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;
}

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

于 2015-02-17T22:43:20.973 回答
0

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

此类已弃用的显示相关功能现在由 DateFormat 提供,而此类已弃用的计算功能现在由 Calendar 提供。

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

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

于 2015-02-17T21:55:49.057 回答