比较 java 中的卡有效期。世纪末?
Compare card expiry date in java. End of century?
我需要使用 Calendar.after()
方法将当前日期与 MM/yy
格式的卡到期日期进行比较。 (我不能将 Java 8 与其新的日期处理 类 一起使用)。
为了匹配年份,我使用 SimpleDateFormat.set2DigitYearStart(firstYearOfCurrentCentury)
。
所以这工作正常,但假设我的应用程序将在 2099 年使用,所以卡到期日期可能会变成 MM/02
所以这个值将大于当前的 2099 年,但应用程序仍然会以为是 2002 年。
如果我们不知道卡的有效期和格式仍然 MM/yy
,那么处理这种情况的最佳做法是什么?
提前感谢您的回答。
如果你有Card Creation Date这样的数据,你也可以和它比较,认为你有约束卡到期日期>=卡创建日期。
我找到的解决方案不是比较日期,而是按字典顺序比较字符串。您只需要先比较年份,然后比较月份和 impelent Comparator where 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;
}
我需要使用 Calendar.after()
方法将当前日期与 MM/yy
格式的卡到期日期进行比较。 (我不能将 Java 8 与其新的日期处理 类 一起使用)。
为了匹配年份,我使用 SimpleDateFormat.set2DigitYearStart(firstYearOfCurrentCentury)
。
所以这工作正常,但假设我的应用程序将在 2099 年使用,所以卡到期日期可能会变成 MM/02
所以这个值将大于当前的 2099 年,但应用程序仍然会以为是 2002 年。
如果我们不知道卡的有效期和格式仍然 MM/yy
,那么处理这种情况的最佳做法是什么?
提前感谢您的回答。
如果你有Card Creation Date这样的数据,你也可以和它比较,认为你有约束卡到期日期>=卡创建日期。
我找到的解决方案不是比较日期,而是按字典顺序比较字符串。您只需要先比较年份,然后比较月份和 impelent Comparator where 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;
}