Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较java中的卡过期日期。世纪末?_Java_Android_Date_Calendar_Simpledateformat - Fatal编程技术网

比较java中的卡过期日期。世纪末?

比较java中的卡过期日期。世纪末?,java,android,date,calendar,simpledateformat,Java,Android,Date,Calendar,Simpledateformat,我需要使用Calendar.after()方法以MM/yy格式将当前日期与卡到期日期进行比较。(我不能将Java8与其新的日期处理类一起使用) 为了匹配年份,我使用了SimpleDateFormat.set2DigitYearStart(本世纪的第一年) 这很好,但假设我的应用程序将在2099年使用,所以卡的到期日期可能会变成MM/02,所以这个值将大于当前的2099年,但应用程序仍然认为是2002年 如果我们不知道卡的有效期和格式仍然是MM/yy,那么处理这种情况的最佳做法是什么 提前感谢您的

我需要使用
Calendar.after()
方法以
MM/yy
格式将当前日期与卡到期日期进行比较。(我不能将Java8与其新的日期处理类一起使用)

为了匹配年份,我使用了
SimpleDateFormat.set2DigitYearStart(本世纪的第一年)

这很好,但假设我的应用程序将在2099年使用,所以卡的到期日期可能会变成
MM/02
,所以这个值将大于当前的2099年,但应用程序仍然认为是2002年

如果我们不知道卡的有效期和格式仍然是
MM/yy
,那么处理这种情况的最佳做法是什么


提前感谢您的回答。

如果您有诸如卡片创建日期之类的数据,您也可以与之进行比较,就像您有约束卡片过期日期>=卡片创建日期。

我发现解决方案不是比较日期,而是按字母顺序比较字符串。您只需要首先比较年份,然后比较月份和推进比较器,其中0>9

public static boolean compareCardExpDateLexicographically(String dateToCompare) {
    SimpleDateFormat sdf = new SimpleDateFormat("yy/MM", Locale.US);
    Date date = new Date();
    String currentDate = sdf.format(date);
    String dateToComp = sdf.format((parseCardExpiryDate(dateToCompare)).getTime());

    Comparator<String> comp = new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {

            if (o1.compareTo(o2) == 9) return -1;
            else if (o1.compareTo(o2) == -9) return 1;
            else if (o1.compareTo(o2) > 0) return 1;
            else if (o1.compareTo(o2) == 0) return 0;
            else return -1;
        }
    };

    return comp.compare(dateToComp, currentDate) >= 0;
}
public静态布尔比较按字典顺序排列(字符串dateToCompare){
SimpleDataFormat sdf=新的SimpleDataFormat(“yy/MM”,Locale.US);
日期=新日期();
字符串currentDate=sdf.format(日期);
字符串dateToComp=sdf.format((parseCardExpiryDate(dateToCompare)).getTime());
比较器comp=新比较器(){
@凌驾
公共整数比较(字符串o1、字符串o2){
如果(o1.与(o2)==9)相比,返回-1;
否则如果(o1.与(o2)=-9)相比,返回1;
如果(o1.与(o2)>0相比)返回1;
否则如果(o1.compareTo(o2)==0)返回0;
否则返回-1;
}
};
返回公司比较(dateToComp,currentDate)>=0;
}

只需计算出你离哪个世纪(当前日期)更近,并以此为基准