首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在java中使用parse检查输入字符串日期是否在将来,在调用方法时使用"throws ParseException“。

在java中使用parse检查输入字符串日期是否在将来,在调用方法时使用"throws ParseException“。
EN

Stack Overflow用户
提问于 2018-10-17 06:24:32
回答 1查看 504关注 0票数 -1

我正在处理一个类的信用卡验证部分,但是我被卡在如何检查卡是否过期的方法上。

付款类别(部分):

代码语言:javascript
复制
public Payment(...,String date,...)
{
    ...
    sendEmail(order,this.billingAddress,remark);
}

public boolean checkExpiry(String inDate) throws ParseException
{
    SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
    Date expiry=format.parse(inDate);
    Date today = new Date();
    if(today.before(expiry))
    {
        return true;
    }else{
        return false;
    }
}

public boolean isValid(String cardType,String cardNum,String date) throws ParseException
{
    if(cardType.equals("MasterCard") || cardType.equals("Visa")){
        if(cardNum.length()==16){
           if(checkExpiry(date)){
                return true;
            }else{
                remark="Credit Card Expired";
                return false;
            }
        }else{
            remark="Invalid Credit Card Number";
            return false;
        }
    }else{
        remark="Invalid Credit Card Type";
        return false;
    }
}

public void sendEmail(Order order, Address address, String remark)throws ParseException
{
    Email email = new Email(customer);
    if(this.isValid(cardType,cardNum,date)==true){
        email.success(order,address);
    }else{
        email.failure(this.getRemark());
    }
}

这是我目前使用的方法。但是,当在sendEmail()方法的构造函数中调用方法时,一条错误消息告诉我"unreported java.text.ParseException;must be call or caught to be However“。

我有两个问题:

1)我应该怎么做才能编译这个类

2)有没有更简单/更有效的方法来检查包含日期的输入字符串是否在将来?

EN

回答 1

Stack Overflow用户

发布于 2018-10-17 06:34:41

1)我应该怎么做才能编译这个类

定义sendEmail以抛出可能的ParseException

代码语言:javascript
复制
public void sendEmail(Order order, Address address, String remark)throws ParseException {...

任何调用它的方法/构造函数都需要处理或重新抛出异常。

我建议更改你的构造函数,这样它也会抛出ParseException...

代码语言:javascript
复制
public Payment(...,String date,...) throws ParseException {...

这将允许异常冒泡到原始调用者

然后调用者需要处理,可以通过捕获它...

代码语言:javascript
复制
try {
    Payment payment = new Payment(...);
} catch (ParseException exp) {
    System.err.println("Failed to process your payment due to an error");
    // exp.printStackTrace();
}

或者诸如此类的

2)有没有更简单/更有效的方法来检查包含日期的输入字符串是否在将来?

这是一个宽泛的问题。我的第一感觉是,不要接受字符串日期(对不起,但这对我来说是一个真正的bug熊)。

话虽如此,我还是建议使用Java更新的(和改进的)日期/时间功能……

代码语言:javascript
复制
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("dd/MM/yyyy", Locale.ENGLISH);
LocalDate localDate = LocalDate.parse("16/10/2018", pattern);
System.out.println(localDate);

它打印2018-10-16

然后,您可以使用诸如LocalDate.now().isAfter(localDate)之类的工具来测试日期是否已过期(基于您的需要的isBefore和/或equals的任何变体)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52844813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档