【问题标题】:Compare card expiry date in java. End of century?比较java中的卡到期日期。世纪末?
【发布时间】:2016-11-03 09:16:48
【问题描述】:

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

为了匹配年份,我使用SimpleDateFormat.set2DigitYearStart(firstYearOfCurrentCentury)

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

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

提前感谢您的回答。

【问题讨论】:

  • 只要算出你离哪个世纪更近(当前日期)并将其作为基线

标签: java android date calendar simpledateformat


【解决方案1】:

如果你有卡片创建日期这样的数据,你也可以与它进行比较,认为你有约束卡片有效期>=卡片创建日期。

【讨论】:

    【解决方案2】:

    我发现解决方案不是比较日期,而是按字典顺序比较字符串。您只需要先比较年份,然后再比较月份,然后再比较 0 > 9 的 Comparator。

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-14
      • 1970-01-01
      • 2015-11-20
      相关资源
      最近更新 更多