When trying to compare two DateTime I wrote this code
private boolean compareTime(DateTime dt1, DateTime dt2) 
{ 
    long d1 = (new Duration(dt1.getMillis() - dt2.getMillis())).getMillis();
    long d2 = Duration.standardHours(1).getMillis(); 
    return  d1  < d2; 
}
DateTime dt1 = new DateTime();
Thread.sleep(250);
DateTime dt2 = dt1.plusHours(2);
System.out.println(compareTime(dt1,dt2));
System.out.println(compareTime(dt2,dt1));
Expected this to print
false
false
But it was
true
false
So when I looked into Duration CTOR, then turned out it actually created a Duration with negative millisecond duration (getMils() returns -ve).
What is the meaning of -ve Duration ? (To keep it very objective) Is this a bug or a feature ?
 
  
                     
                        
Sounds entirely sensible to me. You're passing a negative number of milliseconds into the constructor - why would you expect that to become positive?
A negative duration is simply a negative amount of time - the time from "now" to "some time in the past", for example. It allows sensible arithmetic:
Instant x = ...;
Instant y = ...;
// Duration from x to y, although the result isn't "anchored" (it forgets x and y)
Duration d = new Duration(x, y);
Instant y2 = x.plus(d); // y2 is now equal to y
Without negative durations, this would be impossible.
If you always want a non-negative duration, just call Math.abs - or in your case, don't use Duration at all for d1:
long d1 = Math.Abs(dt1.getMillis() - dt2.getMillis());
 
                    See more on this question at Stackoverflow