Beräkning skillnaderna mellan två datum i Java 6.0 och tidigare kan vara bedrägligt svårt på grund av behovet att rymma skottår sekunder språng , dagsljus gånger sparande och andra justeringar regelbundet till kalendern i de flesta länder . Denna handledning ger två lösningar, en som inte bör användas för situationer där DST eller skottår kan orsaka allvarliga problem och en mer sofistikerad alternativ bygger 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. Saker du behöver
Computer Review, Java
JSR - 310 ( tillval )
Visa fler instruktioner
Använda Java 6.0 Verktyg
1
Skapa ett ny klass med namnet " DateDifferencer " och filnamnet " DateDifferencer.java . " Ge den följande skelettet :
/*** Denna klass ger två metoder för att hitta skillnader mellan datumen : * - En alternativ metod som inte tar hänsyn till skottår och andra konstigheter datum * men som är kompatibel med den senaste versionen av Java , som i början av 2010 * - . . En mer sofistikerad version som använder externa JSR - 310 bibliotek , * som kommer att ingå i Java 7 , kommer att släppas i slutet av 2010 ** @ author Kevin Walker * /public class DateDifferencer {
}
Allt annat kommer att gå i denna klass skelett .
2
Beräkna antalet millisekunder i en dag och lagra den 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 i en dag är lika med 1000 millisekunder per sekund * 60 sekunder per minut * 60 minuter per timme * 24 timmar per dag * /
public final static double MILLISECONDS_IN_DAY = 1000 * 60 * 60 * 24 ,
3
Skapa " 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 felfri . Felaktigheter kan uppstå på grund av skottår . ** @ Return antalet dagar skillnaden mellan de två datum utan korrigering för skottår eller sommartid förändringar . * /Public static dubbel findDifference ( Date d1 , Datum d2 ) {
double diff = Math.abs ( d2.getTime ( ) - d1.getTime ( ) ) ;
dubbla dagar = diff /MILLISECONDS_IN_DAY ,
dagars returrätt ;
}
Detta fungerar genom att hitta skillnaden mellan de två datumen i fråga om millisekunder . Den delar sedan det med antalet millisekunder i en dag ( som du beräknas i steg 2 ) .
Använda JSR - 310
4
Placera JSR - 310 Tid " jar " -filen i samma katalog som resten av ditt program .
5
Lägg några fler importen till din DateDifferencer klassen så att du kan få tillgång till JSR 310 bibliotek .
import javax.time.Duration , import javax.time.period.Period ; .
6
Lägg till en ny metod för att din DateDifferencer klass
/*** @ return en sträng beskriver skillnaden mellan de två datum * /public static String findDifferenceWithJSR ( Date start , Datum end ) { duration duration = Duration.durationBetween ( start, slut ) , . Period diff = Period.nanos ( duration.toNanos ( ) ) ; return new diff.toString ( ) ;}
Detta skapar ett " Duration " objekt , som håller skillnaden mellan de två datumen . Du kan stanna där och tillbaka Varaktighet : s " toString " kommandot . Samtidigt ger detta svaret i form av sekunder , vilket inte är läsbar . Så skapas ett " Period " objekt och använder sin " toString " kommandot .