Access e formato data

di Andrea Zani, in .NET,

Una delle più frequenti domande che ho trovato sui NG dedicati all'ASP e, ora, all'ASP.NET, è a riguardo del formato delle date da utilizzare dei database Access. Molti utenti si trovano, dopo un determinato periodo in cui tutto sembrava funzionare correttamente, con pagine ASP/ASP.NET che ritornano date assurde. Inizialmente si dà la colpa di questo, alle impostazioni della nostra web-application: si prova modificare l'LCID nelle ASP (per stabilire il tipo di date dipendentemente dal paese) o il CultureInfo nel web.config delle ASP.NET, senza però riuscire a risolvere il problema.

In questo caso la causa del problema non sono le impostazioni di visualizzazione o il modo in cui si prelevano le informazioni dal database, ma dal modo in cui si è inserita la data! Access e molti altri database accettano il formato della data nel seguente modo: mm/gg/aaaa, oppure, meglio ancora: aaaa/mm/gg, dove aaaa è l'anno, mm il mese e gg il giorno.

Ma perché, dunque, in molte occasioni invece la data viene memorizzata nel modo corretto e improvvisamente appare sballata? La risposta è molto semplice. Abitualmente un programmatore inserisce la data nel solito formato gg/mm/aaaa. Vediamo degli esempi:

26/08/2000 (26 agosto)
13/12/2000 (13 dicembre)
30/09/2002 (30 settembre)

Access, che accetta il formato, come detto, mm/gg/aaaa, si rende conto che il primo numero non può essere il mese (non esiste un mese che ha un equivalente numerico maggiore di 12), e converte in modo del automatico le date nel suo formato prima dell'inserimento:

08/26/2000
12/13/2000
09/30/2002

E infatti queste date saranno utilizzate senza problemi dal nostro database e dalla nostra web-application. Ma cosa accade se vogliamo inserire queste date?

07/10/2000 (7 ottobre)
10/03/2001 (10 marzo)

In questo caso il database penserebbe che le date sono inserite nel modo corretto (i primi due numeri sono nel range 1-12), ma leggendole nel suo formato esse in verità corrisponderebbero alle date:

10/07/2000 (10 luglio!!!)
03/10/2001 (3 ottobre!!!)

Ed è quello che accade quando avvengono quei problemi di date nelle nostre web-application. La regola principale è memorizzare sempre la data nel formato corretto mm/gg/aaaa effettuando le dovute modifiche del caso. Per esempio, per inserire la data attuale nel database:

Per le classic ASP:
data=month(date())&"/"&day(date())&"/"&year(date())
Per l'ASP.NET:
data=DateTime.Now.ToString("MM/dd/yyyy")

L'ora, fortunatamente, non presenta questi problemi. Se volessimo aggiungere anch'essa nel nostro database sarà sufficiente:

Per le classic ASP:
data=month(date())&"/"&day(date())&"/"&year(date())&" "&time()
Per l'ASP.NET:
data=DateTime.Now.ToString(@"dd/MM/yyyy HH.mm.ss")

NOTA BENE: MySQL ha un suo formato di memorizzazione delle date, esso accetta, tra le altre: aaaammgg; Sql Server, dipendentemente la sua configurazione, accetta le date nel formato corretto, gg/mm/aaaa, ma è bene verificare e utilizzare, per migliori prestazioni, la funzione date e time interna all'engine del server.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese