Insanity Geek
Insanity Geek

Reputation: 157

Java Joda time isAfter date solution

I want to compare two dates. If the current date time is greater or after the specific date , then it will return 'True'.

So far I have tried this.

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));

As today is 23 and dhakaTime.plusDays(2) will be 25 so it should return "true".

But I am getting "false".

Output value :

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

Am i missing something or doing something wrong?

Upvotes: 0

Views: 1165

Answers (2)

Sridhar
Sridhar

Reputation: 1553

It gives false correctly.

You're comparing

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

They both are at same date, but with time, deadLineTime is at 11AM but dhakaTime(+2) is at 2PM. So,

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

EDIT: Testcases

As you mentioned you're testing, The following used different test cases for comparing deadLine with dhakaTime (+1, and +2 days). I hope this gives you an idea about how this works.

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))); 
}

Upvotes: 3

bobby
bobby

Reputation: 2789

Try using the method DateTimeFormatter withZone(DateTimeZone zone) and use that to create the DateTime

Upvotes: 0

Related Questions