Hvordan beregne Dato Forskjell i Java

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 ())

doble dager = diff / MILLISECONDS_IN_DAY

retur dager

}

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

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)

Periode diff = Period.nanos (duration.toNanos ())

returnere nye diff.toString ()

}

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.