Java Joda时间是晚于日期的解决方案

Java Joda时间是晚于日期的解决方案,java,jodatime,Java,Jodatime,我想比较两个日期。 如果当前日期时间大于或晚于 指定日期,则返回“True” 到目前为止,我已经试过了 String deadline = "25/11/2017 11:00:00"; DateTime utc = new DateTime(DateTimeZone.UTC); DateTimeZone timeZone = DateTimeZone.forID("Asia/Dhaka"); DateTime dhakaTime = utc.toDateTime(timeZone); //Dea

我想比较两个日期。 如果当前日期时间大于或晚于 指定日期,则返回“True”

到目前为止,我已经试过了

String deadline = "25/11/2017 11:00:00";
DateTime utc = new DateTime(DateTimeZone.UTC);
DateTimeZone timeZone = DateTimeZone.forID("Asia/Dhaka");
DateTime dhakaTime = utc.toDateTime(timeZone);
//Dead Line Time
DateTimeFormatter format = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
DateTime deadlineTime = format.parseDateTime(deadline.trim());
//Comapare
return deadlineTime.isAfter(dhakaTime.plusDays(2));
因为今天是23日,而现在是25日,所以它应该会回来 “真的”

但我越来越“假”

产值:

dhakaTime.plusday(2)=2017-11-25T14:10:27.762+06:00
死线时间=2017-11-25T11:00:00.000+06:00


我是遗漏了什么还是做错了什么?

它正确地给出了
false

你在比较

deadLineTime = 2017-11-25T11:00:00.000+06:00 and 
dhakaTime(+2) =  2017-11-25T14:10:27.762+06:00
它们都在同一日期,但随着时间的推移,
deadLineTime
11AM
dhakaTime(+2)
2PM上。所以

(2017年11月25日上午11点)之后(2017年11月25日下午2点)
false

编辑:测试用例

正如您所提到的,下面使用了不同的测试用例来比较
截止日期
dhakaTime
(+1天和+2天)。我希望这能让你了解它是如何工作的

public static void main(String[] args) {
    String deadline = "25/11/2017 11:00:00";
    DateTime utc = new DateTime(DateTimeZone.UTC);
    DateTimeZone timeZone = DateTimeZone.forID("Asia/Dhaka");
    DateTime dhakaTime = utc.toDateTime(timeZone);
    //Dead Line Time
    DateTimeFormatter format = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
    DateTime deadlineTime = format.parseDateTime(deadline.trim());

    System.out.println("Deadline : " + deadline);
    System.out.println("Current datetim : " + dhakaTime);
    System.out.println("current datetime + 1 day : " + dhakaTime.plusDays(1));
    System.out.println("current datetime + 2 day : " + dhakaTime.plusDays(2));

    System.out.println("Is deadline after current datetime:" + deadlineTime.isAfter(dhakaTime)); 
    System.out.println("Is deadline after current datetime + 1 day:" + deadlineTime.isAfter(dhakaTime.plusDays(1))); 
    System.out.println("Is deadline after current datetime + 2 day:" + deadlineTime.isAfter(dhakaTime.plusDays(2))); 
}

它正确地给出了
false

你在比较

deadLineTime = 2017-11-25T11:00:00.000+06:00 and 
dhakaTime(+2) =  2017-11-25T14:10:27.762+06:00
它们都在同一日期,但随着时间的推移,
deadLineTime
11AM
dhakaTime(+2)
2PM上。所以

(2017年11月25日上午11点)之后(2017年11月25日下午2点)
false

编辑:测试用例

正如您所提到的,下面使用了不同的测试用例来比较
截止日期
dhakaTime
(+1天和+2天)。我希望这能让你了解它是如何工作的

public static void main(String[] args) {
    String deadline = "25/11/2017 11:00:00";
    DateTime utc = new DateTime(DateTimeZone.UTC);
    DateTimeZone timeZone = DateTimeZone.forID("Asia/Dhaka");
    DateTime dhakaTime = utc.toDateTime(timeZone);
    //Dead Line Time
    DateTimeFormatter format = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
    DateTime deadlineTime = format.parseDateTime(deadline.trim());

    System.out.println("Deadline : " + deadline);
    System.out.println("Current datetim : " + dhakaTime);
    System.out.println("current datetime + 1 day : " + dhakaTime.plusDays(1));
    System.out.println("current datetime + 2 day : " + dhakaTime.plusDays(2));

    System.out.println("Is deadline after current datetime:" + deadlineTime.isAfter(dhakaTime)); 
    System.out.println("Is deadline after current datetime + 1 day:" + deadlineTime.isAfter(dhakaTime.plusDays(1))); 
    System.out.println("Is deadline after current datetime + 2 day:" + deadlineTime.isAfter(dhakaTime.plusDays(2))); 
}

尝试使用DateTimeFormatter withZone(DateTimeZone)方法创建日期时间

尝试使用DateTimeFormatter withZone(DateTimeZone)方法创建日期时间

打印两个日期并检查其值。您可能会在那里找到解决方案。dhakaTime.plusDays(2)=2017-11-25T14:10:27.762+06:00死线时间=2017-11-25T11:00:00.000+06:00@MadJavaProgrammer我添加了一个答案。打印出这两个日期并检查它们的值。您可能会在那里找到解决方案。dhakaTime.plusDays(2)=2017-11-25T14:10:27.762+06:00死线时间=2017-11-25T11:00:00.000+06:00@MadJavaProgrammer我已经添加了一个答案。为什么要为dhakaTime添加2天?我想我需要这样做:dhakaTime.isAfter(deadlineTime)对吗?如果是为您的测试,我认为它是正确的。因此,您可以为
dhakaTime
添加一天,它将返回true,直到dhakaTime为
27-11-2017 10:59:59
。当您添加2天时,时间已经超过了截止日期,应返回
false
。如果您这样做,
dhakaTime.isAfter(deadlineTime)
,则只有当
dhakaTime
大于
deadLine
时间时,它才会返回
true
。也就是说,只有在超过死线时间后才进行检查。为什么要为dhakaTime添加2天?我想我需要这样做:dhakaTime.isAfter(死线时间)对吗?如果是针对您的测试,我认为它是正确的。因此,您可以为
dhakaTime
添加一天,它将返回true,直到dhakaTime为
27-11-2017 10:59:59
。当您添加2天时,时间已经超过了截止日期,应返回
false
。如果您这样做,
dhakaTime.isAfter(deadlineTime)
,则只有当
dhakaTime
大于
deadLine
时间时,它才会返回
true
。也就是说,只有在超过死线时间时才进行检查。