2016-11-03 30 views
-2

我需要使用Calendar.after()方法将当前日期与卡片有效日期的格式MM/yy进行比较。 (我不能使用Java 8及其新的Date处理类)。比较java中的卡片失效日期。世纪末?

要匹配年,我使用SimpleDateFormat.set2DigitYearStart(firstYearOfCurrentCentury)

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

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

在此先感谢您的答复。

+2

只要计算出哪个世纪更接近(当前日期)并将其用作基线 – musefan

回答

0

我发现解决方案比较不是日期,但字符串按字典顺序。你只需要比较年份第一,然后月份和强制比较器,其中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; 
} 
2

如果你有这样的卡创建日期的数据,你也可以与它比较,就像你有约束卡过期日期> =卡创建日期。