Come calcolare data Differenza in Java

September 1

Come calcolare data Differenza in Java


Calcolare le differenze tra due date in Java 6.0 e versioni precedenti può essere ingannevolmente difficile a causa della necessità di accogliere gli anni bisestili, salto secondi, tempi di risparmio di luce del giorno e le altre rettifiche effettuate regolarmente al calendario nella maggior parte dei paesi. Questo tutorial offre due soluzioni, uno che non dovrebbe essere usato per le situazioni in cui l'ora legale o gli anni bisestili possono causare gravi problemi e un più sofisticato opzione basato sulla libreria JSR-310. Questa libreria è programmato per essere parte del Java 7.0 API quando viene rilasciato alla fine del 2010. Tuttavia, può essere scaricato per l'uso ora.

istruzione

Utilizzo di Java 6.0 Strumenti

1 Creare una nuova classe con il nome di \ "DateDifferencer \" e il nome del file \ Dategli il seguente scheletro "DateDifferencer.java \.":

/ **

Questa classe fornirà due metodi per trovare le differenze tra le date: un metodo nativo che non tiene conto per gli anni bisestili e altra data odditiesbut che è compatibile con l'ultima versione di Java, agli inizi versione più sofisticata 2010.A ​​che utilizza l'esterno libreria JSR-310, che sarà incluso in Java 7, dovrebbe essere rilasciato alla fine del 2010.


@author Kevin Walker
* /
public class DateDifferencer {

}

Tutto il resto andrà in questa classe scheletro.

2 Calcolare il numero di millisecondi in un giorno e conservarla in una costante per un uso successivo. Questo è necessario perché Java 6.0 e versioni precedenti a capire il tempo in modo nativo in millisecondi o nanosecondi.

/ **

Il numero di millisecondi in un giorno è pari a 1000 millisecondi per second60 secondi per minute60 minuti ogni ora 24 ore al giorno
* /

public double MILLISECONDS_IN_DAY static finale = 1000

60 60 * 24;

3 Creare il metodo \ "findDifference \". Assicurarsi che il commento Javadoc nota la debolezza nel metodo per chiunque altro che sceglie di usarlo.

/ **

Questa classe utilizza un metodo semplice per calcolare la differenza tra due dates.However, non è perfetta. Imprecisioni possono derivare a causa degli anni bisestili.
* @ Restituire il numero di giorni differenza tra le due date senza correzione per gli anni bisestili o luce del giorno modifiche risparmio di tempo.
* /
doppio findDifference public static (Data d1, d2 Data) {

doppio diff = Math.abs (d2.getTime () - d1.getTime ())
ANDARE

doppie giorni = diff / MILLISECONDS_IN_DAY
ANDARE

giorni di ritorno
ANDARE

}

Questo funziona trovando la differenza tra le due date in termini di millisecondi. Si divide poi che per il numero di millisecondi in un giorno (che è calcolata al punto 2).

Utilizzando JSR-310

4 Inserire il file JSR-310 Tempo di \ "vaso \" all'interno della stessa directory come il resto del programma.

5 Aggiungere un paio di importazioni alla classe DateDifferencer modo da poter avere accesso alla libreria JSR 310.

importazione javax.time.Duration
ANDARE
import javax.time.period.Period;

6 Aggiungere un nuovo metodo per la classe DateDifferencer.

/ **

@return una stringa che descrive la differenza tra le due date.
* /
String public static findDifferenceWithJSR (Data di inizio, fine Data) {
Durata Durata = Duration.durationBetween (inizio, fine)
ANDARE
Periodo diff = Period.nanos (duration.toNanos ())
ANDARE
restituire nuova diff.toString ()
ANDARE
}

Questo crea un oggetto \ "Durata \", che contiene la differenza tra le due date. Si poteva fermarsi lì e tornare al comando del Durata \ "toString \". Tuttavia, questo fornisce la risposta in termini di secondi, che non è leggibile. Così, poi crea un "Periodo di \" \ oggetto e utilizza il suo comando \ "toString \".