localdatetime与负日期时间的比较

qjp7pelc  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(425)

我在服务器上检查将来的日期有问题。因为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()时,我看到了负值。有没有办法把负数改回正数?或者用其他方法来比较和检查日期是否是预期的未来日期?

h6my8fg2

h6my8fg21#

在转换前检查可变日期面试日期。如果不是问题,那么问题可能出在方法“converttolocaldatetime”上。尝试下面的简单代码。

public static LocalDateTime convertToLocalDateTime(Date date) {
    return date.toInstant()
               .atZone(ZoneId.systemDefault())
               .toLocalDateTime();  
}
pkln4tw6

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 . 下面是一个演示:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;

class Main {
    public static void main(String[] args) throws ParseException {
        // A sample java.util.Date
        Date interviewDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2021-03-05 10:30:00");

        Instant instant = interviewDate.toInstant();

        // Get the local date-time out of instant
        LocalDateTime ldt = instant.atZone(ZoneId.systemDefault()).toLocalDateTime();

        // Now in the local date-time
        LocalDateTime now = LocalDateTime.now();

        // Compare now with ldt
        if (ldt.isAfter(now)) {
            System.out.println("Congratulation! Your interview has been scheduled on " + ldt);
        } else {
            System.out.println("The interview date-time can not be in the past.");
        }
    }
}

输出:

Congratulation! Your interview has been scheduled on 2021-03-05T10:30

相关问题