Corsi on-line

Calcolo delle differenze tra date e dei giorni festivi in Java

Nei forum di discussione vengono spesso richieste delle indicazioni riguardanti le procedure corrette per il calcolo delle differenze tra date in Java; a tale proposito voglio pubblicare in questo articolo un breve snippet che potrebbe aiutare nello sviluppo di applicazioni basate sulle date; nel caso specifico si tratta del sorgente di un programmino in grado di restituire a video il numero di giorni compresi in un intervallo tenendo conto dei giorni lavorativi e di quelli festivi.

import java.util.*;
public class CalcolaDate {
static final long ONE_HOUR = 60 * 60 * 1000L;
public static long intervalloDate(Date datainiziale, Date datafinale){
return ( (datafinale.getTime() - datainiziale.getTime() + ONE_HOUR) / (ONE_HOUR * 24));
}
public static void main(String[] args) {
java.text.SimpleDateFormat formattadate = new java.text.SimpleDateFormat("dd-MM-yyyy");
Calendar inizio = Calendar.getInstance();
inizio.set(2012, Calendar.FEBRUARY, 22);
Calendar fine = Calendar.getInstance();
long totali = (intervalloDate(inizio.getTime(),fine.getTime()));
long festivi = 0;
for (int i = 1; i <= totali; i++){
inizio.add(Calendar.DAY_OF_MONTH,1);
if(inizio.get(Calendar.DAY_OF_WEEK) == 1 || inizio.get(Calendar.DAY_OF_WEEK) == 7){
festivi++;
}
}
long lavorativi = totali - festivi;
System.out.println("Giorni totali " + totali + ". Festivi " + festivi + ". Lavorativi " + lavorativi + ".");
}
}

L’esempio è di semplice comprensione, riporto però alcune annotazioni:

  • a differenza della data iniziale non viene settata quella finale, getInstance() restituirà quindi come valore di fine intervallo la data corrente;
  • il metodo add consente di incrementare la data contenuta nella variabile utilizzando un valore arbitrario, nel caso specifico è stato definito un incremento unitario;
  • DAY_OF_WEEK associa un indice intero ai giorni della settimana partendo da “1” fino a “7”, tenete però conto che per tale field  la settimana viene fatta partire dalla domenica (“1”) e finisce con il sabato (“7”).

Nel caso del nostro esempio non sono stati considerati giorni festivi diversi dal sabato e dalla domenica, in Rete potrete però trovare gli algoritmi necessari per il calcolo delle varie festività, su questa pagina è per esempio disponibile una classe per ottenere la data della domenica di Pasqua sulla base di un anno passato come argomento-

Post correlati
I più letti del mese
Tematiche