比较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;
}
只需计算出你离哪个世纪(当前日期)更近,并以此为基准