我已经通过发送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);
}
答案 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)
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类取代。
Instant
将Date
转换为现代版本:Instant
。 Instant
类代表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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和&amp; SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。