Guida al Visual Basic .NET
Capitolo 64° - DateTimePicker Lavorare con le date
Il tipo di dato standard che il .NET Framework mette a disposizione per lavorare cone le date e gli orari è Date, facente parte del Namespace System. Per compatibilità con il vecchio Visual Basic 6, è presenta anche System.DateTime, che rappresenta la stessa identica entità. Con questo semplice tipo è possibile fare di tutto e perciò non è necessario definire manualmente alcun metodo nuovo quando si lavora con le date. Ecco un elenco dei metodi e delle proprietà più importanti:
Parallelamente, viene definito anche il tipo TimeSpan ("tempo trascorso") che rappresenta un lasso di tempo e si ottiene con la differenza di due
valori Date. Ha le stesse proprietà sopra elencate, fatta eccezione per alcune che possono rivelarsi interessanti, come FromDays,
FromHours, FromSeconds, FromMinutes, FromMilliseconds: funzioni shared che creano un valore di tipo TimeSpan a partire da un ammontare di
giorni, ore, minuti, secondi o millisecondi. Esempio: A long, long lifeEcco un esempio molto semplice e divertito che applica i concetti sopra esposti. Lo scopo del programma è di calcolare con una buona precisione la durata della nostra vita, avendo immesso precedentemente la data di nascita. Il controllo usato è DateTimePicker, le cui proprietà sono autoesplicative. Per ora prenderò in analisi solo le proprietà Format e CustomFormat. La prima permette di definire il formato del controllo: è rappresentata da un enumeratore che può assumere quattro valori, Long (data in formato esteso, come la restituisce la funzione Date.ToLongDateString), Short (data in formato breve, come la restituisce la funzione Date.ToShortdateString), Time (ora in formato esteso) e Custom (personalizzato). Se viene scelta l'ultima opzione, si deve impostare la stringa CustomFormat in modo da riprodurre il valore in conformità ai propri bisogni. Nella stringa possono presenziare queste sequenze di caratteri:
Dato che il controllo dovrà esporre il valore in formato: [nome giorno] [giorno] [nome mese] [anno], ore [ora]:[minuti] La stringa di formato da inserire sarà: dddd d MMMM yyyy, ore HH:mm Gli stessi pattern valgono anche se posti come argomento della funzione Date.ToString("Formato"). I controlli da aggiungere sono un DateTimePicker (dtpBirthday), con una label di spiegazione a fianco, una label che visualizzi i risultati (lblAge) e un timer (tmrRefresh) per aggiornare il risultato a ogni secondo che passa. Ora non resta che scrivere il codice, per altro molto semplice. Il sogente fa uso di un controllo Timer, che una volta abilitato (Timer.Enabled=True o Timer.Start()), lancia un evento Tick ogni Timer.Interval millisecondi circa (il valore è molto variabile, a seconda della velocità del computer su cui viene fatto correre). Class Form1 Private Sub tmrRefresh_Tick(ByVal sender As Object, _ ByVal e As EventArgs) Handles tmrRefresh.Tick 'Ottiene la differenza tra le due date Dim Age As TimeSpan = (Date.Now - dtpBirthDay.Value) 'La trasforma in secondi Dim Seconds As Double = Age.TotalSeconds 'Variabile temporanea che serve alla costruzione Dim AgeStr As New System.Text.StringBuilder With AgeStr .AppendLine("Hai vissuto") 'Calcola i giorni secondo il modo già visto nelle prime 'lezioni sulle classi e le proprietà .AppendFormat("{0} giorni{1}", Seconds (60 * 60 * 24), vbCrLf) Seconds -= (Seconds (60 * 60 * 24)) * (60 * 60 * 24) 'E così anche ore, minuti e secondi .AppendFormat("{0} ore{1}", Seconds 3600, vbCrLf) Seconds -= (Seconds 3600) * 3600 .AppendFormat("{0} minuti{1}", Seconds 60, vbCrLf) Seconds -= (Seconds 60) * 60 .AppendFormat("{0:n0} secondi", Seconds) 'Quindi mette il risultato come testo della label lblAge.Text = .ToString End With End Sub End Class
Per il mio caso, il risultato è questo:
C#, TypeScript, java, php, EcmaScript (JavaScript), Spring, Hibernate, React, SASS/LESS, jade, python, scikit, node.js, redux, postgres, keras, kubernetes, docker, hexo, etc...
|