我在服务器上检查将来的日期有问题。因为date.parse()在chrome和firefox下解析不同。在firefox下,向服务器传递一个负日期时间。因为我想避免这种浏览器问题,所以我尝试在服务器端实现验证。
Date currentDate = new Date();
Date interviewingDate = interview.getInterviewingDate();
LocalDateTime currentDateTime = convertToLocalDateTime(currentDate);
LocalDateTime interviewingDateTime = convertToLocalDateTime(interview.getInterviewingDate());
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedCurrentDateTime = currentDateTime.format(formatter);
String formattedInterviewDateTime = interviewingDateTime.format(formatter);
我试着把服务器的时间和案件采访的时间进行比较。因为未来的日子是不允许的, if(interviewingDateTime.isAfter(currentDateTime)) return -1
但是当我测试它时,结果不是我所期望的。
下面是一些日志:
currentdatetime.gettime()1607592350160
interviewDateTime.gettime()-125883137443000
格式CurrentDateTime 2020-12-10 17:25:50
格式面试日期时间2021-12-03 13:55:00
截止日期:2020-12-10
面试日期截止日期-2020-12-03
访谈日期时间.tolocaltime()13:55
currentdatetime.tolocaltime()17:25:50.160
interviewingdatetime.isafter(currentdatetime):false
访谈日期。比较(当前日期):-1
我希望isafter返回true,因为面试时间是将来的日期。当我试图输出本地日期和原始日期对象gettime()时,我看到了负值。有没有办法把负数改回正数?或者用其他方法来比较和检查日期是否是预期的未来日期?
2条答案
按热度按时间h6my8fg21#
在转换前检查可变日期面试日期。如果不是问题,那么问题可能出在方法“converttolocaldatetime”上。尝试下面的简单代码。
pkln4tw62#
api的日期时间
java.util
以及它们的格式化api,SimpleDateFormat
过时且容易出错。建议完全停止使用它们,并切换到现代日期时间api。在trail:date-time了解现代日期时间api。注意:无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用threeten backport,它将大部分java.time功能向后移植到Java6和Java7。
如果您正在为一个android项目工作,并且您的android api级别仍然不符合java-8,请检查通过desugaring提供的java8+api以及如何在android项目中使用threetenabp。
如果要获取java.util.date,如何使用现代日期时间api
转换
java.util.Date
进入java.time.Instant
使用java.util.Date#toInstant
. 下面是一个演示:输出: