Home

12print.it

stampa foto gratis!!

Digitalpix.it

Visita il sito Digitalpix!

Lavorare con le date in Java

Stampa E-mail
Manuali - Programmazione - Java
document_java

Lavorare con le date in Java

Verificare le date
Vediamo come, a partire da una data in formato stringa se ne possa verificare la validità mediante un programma Java.
Formattare le date
Dato un oggetto java Date, vogliamo ottenere la data sotto forma di stringa e con un dato formalismo grafico prestabilito.
Da string a Data
Data una stringa che rappresenta una data vogliamo l'oggetto date corrispondente.
Problema: Abbiamo una stringa che rappresenta una data, la stringa è nel formato YYYYMMDD. Ad es. 20090115. Vogliamo verificare, mediante un programma Java, se questa stringa rappresenti una data vera e propria. Ovvero, dobbiamo verificare se i valori siano tutti numerici e in caso affermativo rappresentino effettivamente una data reale. Ad es. il valore 20090235 non rappresenta una data reale dato che il mese di febbraio non ha 35 giorni!

Soluzione: Ecco una funzione Java per fare questo.
/**
* Funzione per la verifica della corretteza di una data.
* La data di ingresso è nel formato YYYYMMDD. Questa funzione verifica che
* MM sia compreso tra 1 e 12 e che di conseguenza il giorno sia corretto.
* E' che tutti i dati siano numerici.
*
* @param testDate data da verificare nel formato stringa YYYYMMDD
* @return
*/
public boolean verifyDate(String testDate)
{
if(testDate.length()!=10)
return false;
String year = testDate.substring(0, 4);
String month = testDate.substring(4, 6);
String day = testDate.substring(6, 8);
int yearI = 0;
int monthI = 0;
int dayI = 0;
Calendar myCal = GregorianCalendar.getInstance(TimeZone.getTimeZone("Etc/UTC"));
int minMonth = myCal.getActualMinimum(Calendar.MONTH)+1;
int maxMonth = myCal.getActualMaximum(Calendar.MONTH)+1;
int minDay = 0;
int maxDay = 0;
try{
yearI = Integer.parseInt(year);
myCal.set(Calendar.YEAR, yearI);

monthI = Integer.parseInt(month);
if(!(monthI>=minMonth && monthI<=maxMonth))
return false;
myCal.set(Calendar.MONTH, monthI-1);

minDay = myCal.getActualMinimum(Calendar.DAY_OF_MONTH);
maxDay = myCal.getActualMaximum(Calendar.DAY_OF_MONTH);
dayI = Integer.parseInt(day);
if(!(dayI>=minDay && dayI<=maxDay))
return false;
myCal.set(Calendar.DAY_OF_MONTH, dayI);

}catch(NumberFormatException nfe)
{
return false;
}
return true;
}

Questa funzione Java restituisce TRUE se la verifica è andata a buon fine, FALSE altrimenti.

Problema: Java e il problema della formattazione delle date.
Vediamo come risolvere il problema con una funzione molto generale.
Dato un oggetto java Date, vogliamo ottenere la data sotto forma di stringa e con un dato formalismo grafico prestabilito. A volte si hanno un sacco di problemi con l'utilizzo di specifici timezone. Con la funzione proposta non ci dovrebbe essere alcun problema.

Soluzione:
Ecco il metodo da utilizzare:

java.util.Date myDate = ...oggetto date pre-esistente o creato ad hoc

//Si crea per prima cosa l'oggetto Calendar
Calendar myCal = GregorianCalendar.getInstance(TimeZone.getTimeZone("Etc/UTC"));
myCal.setTime(this.getNascita());
//Si formatta la data nella maniera voluta
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
//Si converte la data in stringa
String dataStringa = sdf.format(myCal.getTime());


Problema: A partire da una data sotto forma di stringa e con un dato formato, vogliamo controllare la stringa e ottenere un oggetto Date corrispondente.

Soluzione:
/**
* Da una stringa in formato gg/mm/aaaa restituisce una oggetto Date.
* Viene verificata anche la correttezza della stringa.
*
* @param testDate
* @return
*/
public Date stringToDate(String testDate)
{
if(testDate.length()!=10)
return null;
String day = testDate.substring(0, 2);
String month = testDate.substring(3, 5);
String year = testDate.substring(6, 10);


int yearI = 0;
int monthI = 0;
int dayI = 0;
Calendar myCal = GregorianCalendar.getInstance(TimeZone.getTimeZone("Etc/UTC"));
int minMonth = myCal.getActualMinimum(Calendar.MONTH)+1;
int maxMonth = myCal.getActualMaximum(Calendar.MONTH)+1;
int minDay = 0;
int maxDay = 0;
try{
yearI = Integer.parseInt(year);
myCal.set(Calendar.YEAR, yearI);

monthI = Integer.parseInt(month);
if(!(monthI>=minMonth && monthI<=maxMonth))
return null;
myCal.set(Calendar.MONTH, monthI-1);

minDay = myCal.getActualMinimum(Calendar.DAY_OF_MONTH);
maxDay = myCal.getActualMaximum(Calendar.DAY_OF_MONTH);
dayI = Integer.parseInt(day);
if(!(dayI>=minDay && dayI<=maxDay))
return null;
myCal.set(Calendar.DAY_OF_MONTH, dayI);

}catch(NumberFormatException nfe)
{
return null;
}
return myCal.getTime();
}


Piccola Nota
L'uso della funzione TimeZone.getTimeZone("UTC"), ovvero con il codice UTC, potrebbe generare una eccezione FileNotFoundException. I timezone di default usati da java si trovano al seguente percorso
C:\Programmi\Java\jdk1.6.0_13\jre\lib\zi

Qua dentro il file UTC non è più presente ma è presente in Etc/UTC. Quindi la maniera corrette con cui invocare la funzione è TimeZone.getTimeZone("Etc/UTC").
 
Altri Articoli :

» Concorso Nazionale di Fotografia

Concorso Nazionale di Fotografia - 2009Sono lieto di presentarvi la Prima Edizione del Concorso Nazionale di Fotografia organizzata dal Circolo Fotografico “Torre Mordillo”.

» Test Canon IXUS 870 IS (SD880 IS)

Analisi Canon Digital Ixus 870 IS (SD880 IS)Questo è quello che dice Canon: "La fotocamera di alta qualità Digital IXUS 870 IS da 10 megapixel, con finiture in oro o argento, non passa certo inosservata. Consente di scattare foto panoramiche grazie allo zoom grandangolare 4x e di rivedere le foto...

» Test Canon IXUS 200 IS (SD980 IS)

Analisi Canon Digital Ixus 200 IS (SD980 IS)Questo è quello che dice Canon: "Dotata di obiettivo ultragrandangolare 24mm, zoom ottico 5x ed un’interfaccia intuitiva con touch screen, la fotocamera Digital IXUS 200 IS da 12,1 Megapixel combina una tecnologia all'avanguardia con l'elegante design...

» Nital: Sguardi OnLine 54

E' usctio il nuovo numero della prestigiosa rivista Nital, il numero 54 di Settembre 2007 di Sguardi Online.Vi consiglio di leggere l'ottimo articolo "Due migrazioni" sul fotografo ritrattista Marco Delogu.Poi da non perdere c'è l'articolo "Allegories & Macabresques" sul fotografo Andrzej...

» Canon 1D Mark IV: Analisi

Come viene presentata dal sito ufficiale Canon.it la nuova Canon EOS 1D Mark IV: "Leader per risoluzione e velocità, EOS-1D Mark IV, cattura lo straordinario. Riprendi l'azione con 16,1 megapixel a 10 fps o con video Full HD. EOS-1D Mark IV è pronta all’azione." AGGIORNAMENTI21/11/2009:...

My Google channel

XHTML Validity CSS Validity