Hvordan beregne Dato Forskjell i Java
Beregning av forskjeller mellom to datoer i Java 6.0 og tidligere kan være utrolig vanskelig på grunn av behovet for å imøtekomme skuddår, sprang sekunder, sommertid tider og andre justeringer jevnlig 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 skuddår kan forårsake 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. Men det kan lastes ned for bruk nå.
Bruksanvisning
Bruke Java 6.0 Verktøy
1 Opprett en ny klasse med navnet \ "DateDifferencer \" og filnavn \ Give det følgende skjelettet "DateDifferencer.java \.":
/ **
Denne klassen vil gi to metoder for å finne forskjeller mellom datoene: En opprinnelig metode som ikke står for skuddår og annen dato odditiesbut som er kompatibel med den nyeste versjonen av Java, som i tidlig 2010.A mer avansert versjon som bruker den eksterne JSR-310 bibliotek, som vil bli inkludert i Java 7, som kommer ut i slutten av 2010.
@author Kevin Walker
* /
public class DateDifferencer {
}
Alt annet vil gå i denne klassen skjelett.
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 opprinnelig i millisekunder eller nanosekunder.
/ **
Antall millisekunder på en dag er lik 1000 millisekunder per second60 sekunder per minute60 minutter per time 24 timer per dag
* /
offentlig endelige statisk dobbel MILLISECONDS_IN_DAY = 1000
60 60 * 24;
3 Lag \ "findDifference \" metoden. Kontroller at Javadoc kommentaren bemerker svakhet i metoden for alle andre som velger å bruke det.
/ **
Denne klassen benytter en enkel metode for å beregne differansen mellom to dates.However, er det ikke feilfri. Unøyaktigheter kan føre på grunn av skuddår.
* @ Returnere antall dager forskjell mellom de to datoene uten korreksjon for skuddår eller sommertid og vintertid.
* /
public static double findDifference (Date d1, Date d2) {
double diff = Math.abs (d2.getTime () - d1.getTime ())
GÅ
doble dager = diff / MILLISECONDS_IN_DAY
GÅ
retur dager
GÅ
}
Dette fungerer ved å finne forskjellen mellom de to datoene i form av millisekunder. Det skiller da at med antall millisekunder på en dag (som du beregnet i trinn 2).
Ved hjelp av JSR-310
4 Plasser JSR-310 Tid \ "jar \" fil i samme mappe som resten av programmet.
5 Tilsett noen mer import til DateDifferencer klasse slik at du kan få tilgang til JSR 310 bibliotek.
import javax.time.Duration
GÅ
import javax.time.period.Period;
6 Legg til en ny metode for å din DateDifferencer klassen.
/ **
@return en streng som beskriver forskjellen mellom de to datoene.
* /
public static String findDifferenceWithJSR (Date start, siden slutten) {
Varighet varighet = Duration.durationBetween (start, slutt)
GÅ
Periode diff = Period.nanos (duration.toNanos ())
GÅ
returnere nye diff.toString ()
GÅ
}
Dette skaper en \ "Varighet \" objekt, som har forskjellen mellom de to datoene. Du kan stoppe der og returnere Varighet s \ "toString \" kommandoen. Men gir dette svaret i form av sekunder, som ikke er lesbar. Så, det skaper da en \ "Period \" objekt og bruker sin \ "toString \" kommandoen.