Storia della questione:
Lavorare con date e ore è sempre stato un aspetto separato della programmazione in Visual Basic — dai vecchi tipi Variant/Date in VB6 alle strutture Date/DateTime in VB.NET. L'emergere della classe DateTime ha consentito di gestire le date in modo più flessibile, ottenere valori di sistema, calcolare intervalli e formattare correttamente le date.
Problema:
Si verificano frequentemente errori di conversione di stringhe in DateTime (specialmente con diverse località), malfunzionamenti nella gestione dei fusi orari, formattazioni errate per la visualizzazione all'utente o per l'invio a un server.
Soluzione:
DateTime è una struttura che consente di memorizzare date e ore, eseguire operazioni aritmetiche, confronti e convertire nel formato desiderato. Per il parsing delle date in forma di stringa si utilizzano Parse, TryParse, mentre per la formattazione — il metodo ToString con una stringa di formato e, se desiderato, CultureInfo.
Esempio di codice:
Dim oggi As DateTime = DateTime.Now Dim nascita As DateTime = New DateTime(1990, 1, 1) Dim formattato As String = oggi.ToString("yyyy-MM-dd HH:mm") Dim analizzato As DateTime If DateTime.TryParse("15/06/2024", analizzato) Then Console.WriteLine(analizzato.ToString()) End If
Caratteristiche chiave:
1. Qual è il valore di DateTime.MinValue?
DateTime.MinValue — la data 01.01.0001 00:00:00 (e non, ad esempio, 01.01.1970 come in UNIX). Usare con cautela quando si verifica "è stato impostato un valore".
2. È possibile memorizzare "un giorno senza un orario" in DateTime?
No, il tipo DateTime include sempre il valore temporale. Se necessario memorizzare solo la data, impostare l'orario su "00:00:00" e utilizzare solo il formato data per l'output.
3. Come confrontare correttamente le date ignorando il tempo?
Per confrontare solo la parte di data, rimuovere l'orario:
Dim aData As DateTime = DateTime.Now.Date Dim bData As DateTime = someOtherDate.Date If aData = bData Then ...
L'applicazione client accetta la data di nascita dell'utente tramite TextBox e la analizza direttamente tramite DateTime.Parse(textBox.Text). Gli utenti europei e americani inseriscono le date in formati diversi. Di conseguenza — date di nascita errate o eccezioni.
Pro:
Contro:
L'input della data viene effettuato tramite DateTimePicker o tramite TryParseExact(textBox.Text, "dd.MM.yyyy", CultureInfo.InvariantCulture, ...). Il codice prevede meccanismi di fallback e una validazione rigorosa.
Pro:
Contro: