Beregning forskellene mellem to datoer i Java 6.0 og tidligere kan være bedragerisk vanskelig på grund af behovet for at rumme et skudår, skudsekunder , sommertid tider og andre justeringer jævnligt foretaget i kalenderen i de fleste lande. Denne tutorial giver to løsninger , en, der ikke bør anvendes i situationer, hvor DST eller skudår kan forårsage alvorlige problemer og en mere sofistikeret option baseret på JSR -310 -bibliotek. Dette bibliotek er planlagt til at være en del af Java 7.0 API , når den er udgivet i slutningen af 2010. Dog kan det downloades til brug nu . Hvad du har brug
Computer
Java
JSR -310 (ekstraudstyr)
Vis Flere Instruktioner
Brug Java 6,0 Værktøj
1
Opret et ny klasse med navnet " DateDifferencer ", og filnavnet " DateDifferencer.java ". Giv det følgende skelet : Hej
/*** Denne klasse vil give to metoder til at finde forskellene mellem datoer: * - En indfødt metode, der ikke højde for skudår og andre dato mærkværdigheder * men der er kompatibel med den nyeste version af Java, som i begyndelsen af 2010 * - . . En mere sofistikeret version, der bruger eksterne JSR -310 bibliotek, * der vil indgå i Java 7 , på grund af at blive frigivet i slutningen af 2010 ** @ forfatter Kevin Walker * /public class DateDifferencer {
}
Alt andet vil gå inden for denne klasse skelet.
2
Beregn antallet af millisekunder i en dag og gemme det i en konstant til senere brug . Dette er nødvendigt, fordi Java 6,0 og tidligere versioner forstår tid indbygget i millisekunder eller nanosekunder .
/*** Antallet af millisekunder på en dag er lig med 1000 millisekunder per sekund * 60 sekunder per minut * 60 minutter for hver time * 24 timer i døgnet * /
offentlig endeligt statisk dobbelt MILLISECONDS_IN_DAY = 1000 * 60 * 60 * 24 ,
3
Opret " findDifference "-metoden. Sørg for, at javadoc kommentar bemærker svagheder i metoden til alle andre, der vælger at bruge det.
/*** Denne klasse bruger en simpel metode til at beregne forskellen mellem to datoer . * Det er dog ikke fejlfri . Unøjagtigheder kan resultere grund af skudår . ** @ Return antallet af dage, forskellen mellem de to datoer , uden korrektion for skudår eller sommertid ændringer . * /Public static double findDifference (dato d1 , Date d2 ) {
< p> double diff = Math.abs ( d2.getTime () - d1.getTime ());
dobbelt dage = diff /MILLISECONDS_IN_DAY ,
tilbagevenden dage
}
Dette virker ved at finde forskellen mellem de to datoer i form af millisekunder . Derefter deler , at antallet af millisekunder på en dag (som du beregnet i trin 2).
Brug JSR -310
4
Placer JSR -310 Time " jar " fil i samme mappe som resten af dit program.
5.
tilføje et par mere import til din DateDifferencer klasse, så du kan få adgang til JSR 310 biblioteket.
< p > import javax.time.Duration , import javax.time.period.Period , .
6
Tilføj en ny metode til din DateDifferencer klasse
/*** @ returnere en streng beskriver forskellen mellem de to datoer * /public static String findDifferenceWithJSR (Date start, Date ende) { varighed varighed = Duration.durationBetween (start , slut ) . Periode diff = Period.nanos ( duration.toNanos ()); tilbage ny diff.toString ( );}
Dette skaber en " varighed " objekt , der holder forskellen mellem de to datoer. Du kunne stoppe der og returnere Varighed s " toString " kommando . Men dette giver svaret i form af sekunder , hvilket ikke er læsbar . Så det skaber derefter en " Period " objekt og bruger dets " toString " kommando .