Beregne forskjellen mellom to datoer i Java 6.0 og tidligere kan være utrolig vanskelig på grunn av behovet for å imøtekomme skuddår , spranget sekunder , sommertid ganger og andre justeringer regelmessig laget til kalenderen i de fleste land . Denne opplæringen gir to løsninger , en som ikke bør brukes i situasjoner der DST eller spranget år kan føre til alvorlige problemer og en mer sofistikert alternativ basert på JSR - 310 bibliotek . Dette biblioteket er planlagt å være en del av Java 7.0 API når den lanseres i slutten av 2010 . Imidlertid kan den lastes ned for bruk nå . Du trenger
Computer
Java
JSR - 310 (tilleggsutstyr )
Vis flere instruksjoner
Bruke Java 6,0 Verktøy
en
Opprett en ny klasse med navnet " DateDifferencer " og filnavn " DateDifferencer.java . " Gi det følgende skjelett : en
/*** Denne klassen vil gi to metoder for å finne forskjeller mellom datoer : * - En innfødt metode som ikke tar hensyn til skuddår og andre dato rariteter * men som er kompatibel med den nyeste versjonen av Java , som i tidlig 2010 * - . . En mer avansert versjon som bruker den eksterne JSR - 310 bibliotek , * som vil bli inkludert i Java 7 , ventet å bli lansert i slutten av 2010 ** @ author Kevin Walker * /public class DateDifferencer {
}
Alt annet vil gå i denne klassen skjelettet .
2
Beregn antall millisekunder på en dag og lagre den i en konstant for senere bruk. Dette er nødvendig fordi Java 6.0 og tidligere versjoner forstå tid direkte i millisekunder eller nanosekunder .
/*** Antall millisekunder på en dag er lik 1000 millisekunder per sekund * 60 sekunder per minutt * 60 minutter per time * 24 timer per dag * /
public final static double MILLISECONDS_IN_DAY = 1000 * 60 * 60 * 24;
3
Lag " findDifference " metoden. Kontroller at Javadoc kommentar bemerker svakhet i metoden for alle andre som velger å bruke det.
/*** Denne klassen bruker en enkel metode for å beregne forskjellen mellom to datoer . * Det er imidlertid ikke feilfri . Unøyaktigheter kan føre på grunn av skuddår . ** @ Return antall dager forskjellen mellom de to datoene uten korrigering for skuddår eller sommertidinnstillinger endringer . * /Public static double findDifference ( Dato d1 , Dato d2 ) {
< p> double diff = Math.abs ( d2.getTime ( ) - d1.getTime ( ));
doble dager = diff /MILLISECONDS_IN_DAY ;
retur dager ;
} p Dette virker ved å finne forskjellen mellom de to datoer i form av millisekunder. Den deler da at med antall millisekunder på en dag (som du beregnet i trinn 2 ) .
Bruke JSR - 310
4
Plasser JSR - 310 Tid " jar "-filen i samme mappe som resten av programmet.
5
Legg til noen flere importen til din DateDifferencer klassen slik at du kan ha tilgang til JSR 310 bibliotek .
< p > import javax.time.Duration , import javax.time.period.Period ; .
6
Legg til en ny metode til din DateDifferencer klasse
/*** @ return en streng beskriver forskjellen mellom de to datoene * /public static String findDifferenceWithJSR (Dato start , Dato slutten) { Varighet varighet = Duration.durationBetween ( start , slutt) ; . Periode diff = Period.nanos ( duration.toNanos ( ) ); return new diff.toString (); }
Dette skaper en "Varighet" objekt , som holder forskjellen mellom de to datoene . Du kan stoppe der og returnere Varighet er " toString "-kommandoen . Imidlertid gir dette svaret i form av sekunder , noe som ikke er lesbar . Så , det skaper da en " periode" objekt og bruker sin " toString "-kommandoen .