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.
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- C# e Net 6 in Kubernetes con Prometheus e Grafana, il 12 gennaio 2022 alle 21:58
- Snaturare Kubernetes evitando i custom container Docker, il 6 gennaio 2022 alle 19:40
- Provando Kaniko in Kubernetes come alternativa a Docker per la creazione di immagini, il 18 dicembre 2021 alle 20:11
- Divertissement con l'OpenID e Access Token, il 6 dicembre 2021 alle 20:05
- Operator per Kubernetes in C# e Net Core 6., il 28 novembre 2021 alle 19:44
- RBAC in Kubernetes verso gli operator, il 21 novembre 2021 alle 20:52