[Javalist] date diff

Freemail laja at freemail.hu
2020. Már. 10., K, 11:00:04 UTC


Sziasztok!

Egy számomra elég fura dologba futottam bele.

A feladat alapvetően két dátum közti napok száma. Régi progi, úgyhogy 
még Date van.
Az időszak legyen idén február elseje és április vége, és a kezdő és 
záró napok is számítanak. Ami elvárunk, az a 90 (29 + 31 +30).

Date start = FORMAT_DATETIME.parse( "2020.02.01 00:00:00");
Date end   = FORMAT_DATETIME.parse( "2020.05.01 00:00:00");
long diff = end.getTime() - start.getTime();
System.out.println( TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS) + 
" nap" );

Az eredmény: 89 nap!!!

Először a TimeUnit-ra gyanakodtam, de nem az a ludas.

System.out.println( start.getTime() + " - " + end.getTime() + " = " + 
diff + " = " + (diff/1000/60/60) + " óra");

Az eredmény: 2159 óra, pedig 2160-nak kellene lennie!

Aztán a szökőnapra gyanakodtam, ezért megnéztem hónaponként:

System.out.println( (FORMAT_DATETIME.parse( "2020.03.01 
00:00:00").getTime()-FORMAT_DATETIME.parse( "2020.02.01 
00:00:00").getTime())/1000/60/60 );
System.out.println( (FORMAT_DATETIME.parse( "2020.04.01 
00:00:00").getTime()-FORMAT_DATETIME.parse( "2020.03.01 
00:00:00").getTime())/1000/60/60 );
System.out.println( (FORMAT_DATETIME.parse( "2020.05.01 
00:00:00").getTime()-FORMAT_DATETIME.parse( "2020.04.01 
00:00:00").getTime())/1000/60/60 );

Az eredméynek: 696, 743, 721. A március a ludas, mert ott 744 órának 
kellene lennie!

Át tudom hidalni a problémát:
System.out.println( Math.round(diff/1000/60/60/24.0) + " nap" );

De akkor se értem, miért lesz az adott példában a március 1 órával 
rövidebb?
Valakinek van magyarázata vagy ötlete?

(Oracle féle java 1.8)

Laja




További információk a(z) Javalist levelezőlistáról