2016-11-03 23 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

如果你有這樣的卡創建日期的數據,你也可以與它比較,就像你有約束卡過期日期> =卡創建日期。