Java Joda时间是日期解决方案

时间:2017-11-23 07:27:23

标签: 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);
//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岁,dhakaTime.plusDays(2)将是25岁,所以它应该返回 "真"

但我得到"假"。

输出值:

  

dhakaTime.plusDays(2)= 2017-11-25T14:10:27.762 + 06:00
  截止时间= 2017-11-25T11:00:00.000 + 06:00

我错过了什么或做错了什么?

2 个答案:

答案 0 :(得分:3)

它正确地提供了false

您正在比较

deadLineTime = 2017-11-25T11:00:00.000+06:00 and 
dhakaTime(+2) =  2017-11-25T14:10:27.762+06:00

它们都处于同一日期,但随着时间的推移,deadLineTime位于上午11点dhakaTime(+2)位于 2PM 。所以,

(Nov 25, 2017 11AM)isAfter(Nov 25, 2017 2PM)false

编辑:测试用途

正如您提到的那样,以下使用了不同的测试用例来比较deadLinedhakaTime(+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))); 
}

答案 1 :(得分:0)

尝试使用DateTimeFormatter withZone(DateTimeZone区域)方法并使用它创建DateTime