4小时后不得使用Otp

时间:2017-04-26 11:03:52

标签: java date oracle11g

我已经通过发送otp通过电子邮件编写了验证代码。我必须以这样的方式配置,如果用户在4小时后输入otp,则不应接受。 我已经使用了日期对象if条件并且它工作正常,但有没有办法在较少的编码中实现相同。

Date dateFromDatabase=emailData.getBody().getUpdated();

if((dateFromDatabase.getYear()-date.getYear())==0){

    if((dateFromDatabase.getMonth()-date.getMonth())==0){

        if((dateFromDatabase.getDay()-date.getDay())==0){
            if((dateFromDatabase.getHours()-date.getHours())<=4){
                System.out.print("May Be Right otp");

                if( emailData.getBody().getHASHCODE().equals(fromotp)){
                    System.out.print("matched");
                    emails.setId(emailData.getBody().getId());
                    emails .setVERIFIED(1);
                    emails.setHASHCODE("");
                    emails.setEmails(To);
                    //updateEmails(emails);
                    String Subject="Pharmerz Thanknote";
                    String Acknowledge="Thank you for verifying on Pharmerz";
                    email.SendMail(To,Subject,Acknowledge);
                    Emails saveEmails =emailService.create( emails );
                    return new ResponseEntity<Emails>(emails,HttpStatus.OK);

                }else{
                    System.out.print("miss matched");
                    emailService.delete(emailData.getBody().getId());
                    return new ResponseEntity<Emails>(HttpStatus.BAD_REQUEST);
                }



            }else{
                System.out.print("Wrong or Old Otp");
                emailService.delete(emailData.getBody().getId());
                return new ResponseEntity<Emails>(HttpStatus.BAD_REQUEST);
            }
        }else{
            System.out.print("Wrong or Old Otp");
            emailService.delete(emailData.getBody().getId());
            return new ResponseEntity<Emails>(HttpStatus.BAD_REQUEST);
        }

    }else{
        System.out.print("Wrong or Old Otp");
        emailService.delete(emailData.getBody().getId());
        return new ResponseEntity<Emails>(HttpStatus.BAD_REQUEST);
    }

}
else{
    System.out.print("Wrong or Old Otp");
    emailService.delete(emailData.getBody().getId());
    return new ResponseEntity<Emails>(HttpStatus.BAD_REQUEST);
}

2 个答案:

答案 0 :(得分:2)

试试这个:

Date currentDate = new Date();
Date dateFromDatabase = // get the date from the database

long duration  = dateFromDatabase.getTime() - currentDate.getTime();
long diffInHours = TimeUnit.MILLISECONDS.toHours(duration);

您可以使用diffInHours变量并执行业务逻辑。

答案 1 :(得分:1)

TL;博士

Duration.between(                      // Span-of-time unattached to timeline.
    myUtilDate.toInstant() ,           // Convert legacy java.util.Date object to modern java.time.Instant.
    Instant.now()                      // Get the current moment.
).compareTo( Duration.ofHours( 4 ) )   // Ask if the time span variance exceeds our limit of four hours.

避免使用旧版日期时间类。

我认为代码顶部的Date对象是java.util.Date。该类是现在遗留下来的麻烦的旧日期时间类的一部分,由java.time类取代。

使用java.time

Instant

Date转换为现代版本:InstantInstant类代表UTC中时间轴上的一个时刻,分辨率为nanoseconds(小数部分最多九(9)位)。

Instant then = myUtilDate.toInstant();

显然你想将此与当前时刻进行比较,并寻找四小时的差异,尽管你的问题不明确。

获取当前时刻很简单。

Instant now = Instant.now();

Duration

将未附加到时间轴的时间段表示为Duration

Duration variance = Duration.between( then , now );

检查持续时间是否为负,这意味着过去时刻实际上显示为未来。

if( variance.isNegative() ) { … handle error condition … }

将持续时间与我们的4小时限制进行比较。如果当时和现在之间的时间跨度超过四小时,compareTo将返回一个正数(大于零的数字)。

Duration limit = Duration.ofHours( 4 );
Boolean exceededLimit = ( variance.compareTo( limit ) > 0 ) ; // If the time span between then and now is over four hours, `compareTo` returns a positive number (number greater than zero). 

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和&amp; SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore