Beräkna skillnaden mellan två datum i Java 6. 0 och tidigare kan vara bedrägligt svårt på grund av behovet att anpassa skottår sekunder språng , dagsljus gånger sparande och andra justeringar regelbundet göras i kalendern i de flesta länder . Denna handledning ger två lösningar , en som inte ska användas för situationer där DST eller skottår kan orsaka allvarliga problem och en mer sofistikerad alternativ baserat på JSR-310 bibliotek . Detta bibliotek är planerad att vara en del av Java 7,0 API när det släpps i slutet av 2010 . Det kan dock laddas ner för användning nu
Du behöver : .
Computer
Java .
JSR -310 ( tillval ) .
Använda Java 6,0 Verktyg
1 .
Skapa en ny klass med namnet " DateDifferencer " och filnamnet " DateDifferencer. java . " Ge det följande skelettet :
/**
* Denna klass ger två metoder för att hitta skillnader mellan datum :
*-En alternativ metod som inte står för språng år och andra underligheter datum
* men som är kompatibel med den senaste versionen av Java , som i början av 2010 .
*-En mer sofistikerad version som använder den externa JSR-310 bibliotek ,
* som kommer att ingå i Java 7 , som kommer att släppas i slutet av 2010
*
* . @ författaren Kevin Walker
* /
public class DateDifferencer {
}
Allt annat kommer att gå i denna klass skelett .
2 .
Beräkna antalet millisekunder på en dag och förvara det i en konstant för senare användning. Detta är nödvändigt eftersom Java 6. 0 och tidigare versioner förstå tid inbyggt i millisekunder eller nanosekunder .
/**
* Antalet millisekunder på en dag är lika med 1000 millisekunder per sekund
* 60 sekunder per minut
* 60 minuter per timme
* 24 timmar per dygn
* /
offentliga slutlig statisk dubbel MILLISECONDS_IN_DAY=1000 * 60 * 60 * 24 ,
3
Skapa . den " findDifference "metoden . Se till att Javadoc kommentaren noterar svaghet i metoden för någon annan som väljer att använda den .
/**
* Denna klass använder en enkel metod för att beräkna skillnaden mellan två datum .
* Det är dock inte felfria . Felaktigheter kan inträffa på grund av skottår .
*
* @ return det antal dagar som skillnaden mellan två datum utan korrigering för skottår eller sommartid ändras .
* /
public static dubbel findDifference ( Datum d1 , datum d2 ) {
dubbel diff=Math. abs ( d2. getTime ()-d1. getTime ());
dubbel dagar=diff /MILLISECONDS_IN_DAY ;
återvända dagar ,
}
Detta fungerar genom att hitta skillnaden mellan två datum i termer av millisekunder . Den delar sedan att med antalet millisekunder på en dag (som du beräknas i steg 2).
Använda JSR-310
1 .
Placera JSR-310 Time " jar " -fil i samma katalog som resten av ert program .
2 .
Tillsätt några större import till din DateDifferencer klass så att du kan få tillgång till JSR 310 biblioteket .
import javax. time. Duration ;
import javax. time. period. Period .
3
Lägg till en ny metod för att din DateDifferencer klass .
/**
* @ returnera en sträng som beskriver skillnaden mellan de två datumen .
* /
public static String findDifferenceWithJSR ( Datum start , Datum slut ) {
Varaktighet varaktighet=Duration. durationBetween ( start , slut ) ;
Period diff=Period. nanos ( varaktighet . toNanos ());
return new diff. toString () ; }
Detta skapar en " varaktighet " objekt , som innehar skillnaden mellan de två datumen. Du kan stanna där och återlämna Varaktighet : s " toString "kommandot . Men av detta svaret i termer av sekunder , vilket inte är läsbar . Så skapas sedan ett " Period " objekt och använder sin " toString "kommandot .