In Tcl con il comando clock accediamo alle funzioni dedicate alla gestione dell’ora e della data.
In particolare questo comando ha diversi sottocomandi molto utili:
seconds– per acquisire l’ora corrente;format– per convertire l’ora e la data in formati differenti;scan– esegue l’operazione inversa del sottocomandoformat;add– per fare somme e sottrazioni con le ore e le date.
Come acquisire l’ora corrente
# sintassi
clock seconds
Il sottocomando seconds restituisce il valore dei secondi trascorsi da un determinato istante di riferimento. Questo riferimento può cambiare a seconda del sistema operativo e viene indicato con il termine epoca (epoch).
Per i sistemi Unix e Unix-like, come il sistema GNU/Linux, corrisponde alla mezzanotte del 1 gennaio 1970.
Per questo motivo seconds viene utilizzato principalmente per fare dei confronti all’interno di uno stesso programma e calcolare così il tempo trascorso tra un evento ed un altro.
Come formattare l’ora e la data
Per formattare l’ora e la data, in base alle nostre esigenze, Tcl ci mette a disposizione il sottocomando format.
# sintassi
clock format clockValue ?-gmt boolean? ?-format string? ?-timezone zone?
Il sottocomando format trasforma il valore clockValue (che è il valore restituito dal sottocomando seconds) in una stringa umanamente leggibile.
L’argomento -gmt è un valore booleano: se questo valore è 1 o true, allora il tempo sarà formattato come ora media di Greenwich (senza considerare l’ora legale), altrimenti sarà formattato tenendo conto dell’ora legale se questa è prevista nella specifica località dove si sta operando.
L’opzione -format specifica l’effettivo formato che dovrà avere la stringa.
Codice Significato
-------------------------------------------------
%a Nomi dei giorni abbreviati (Mon, Tue, etc.)
%A Nomi dei giorni completi (Monday, Tuesday, etc.)
%b Nomi dei mesi abbreviati (Jan, Feb, etc.)
%B Nomi dei mesi completi (January, February, etc.)
%d Giorno del mese
%j Giorno dell'anno (calendario giuliano)
%m Numero del mese (01-12)
%y Anno in secoli
%Y Anno in quattro cifre (2016)
%H Ora (00-23)
%I Ora (00-12)
%M Minuti (00-59)
%S Secondi (00-59)
%p PM or AM
%D Data come %m/%d/%y
%r Ora come %I:%M:%S %p
%R Ora come %I:%M
%T Ora come %I:%M:%S
%Z Nome del fuso orario
Come ottenere il valore dell’orologio del sistema
# sintassi
clock scan dateString ?-format format?
Con il sottocomando scan possiamo convertire la stringa dateString nel valore dei secondi dell’orologio del sistema.
Se non utilizziamo l’opzione facoltativa -format, la stringa dateString può assumere una delle seguenti forme:
- Ora
hh:mm:ss ?meridian? ?zone?hhmm ?meridian? ?zone?- L’opzione facoltativa
?meridian?può assumere uno di questo valori:AMoPM(oppureamopm). Se l’opzione non viene specificata, l’ora viene interpretata sulla base 24h. - L’opzione facoltativa
?zone?indica il fuso orario e viene espressa con un massimo di tre caratteri (p.e. CET sta per Tempo dell’Europa Centrale).
- Data
mm/dd/yymm/ddmonthname dd, yymonthname dddd monthname yydd monthnameday, dd monthname yy
Come fare somme e sottrazioni con le ore e le date
# sintassi
clock add clockval ?number units?… ?-gmt boolean? ?-locale locale? ?-timezone zone?
Il parametro clockval (che è il valore restituito dal sottocomando seconds) viene sommato al valore positivo o negativo number che rappresenta la units specificata (p.e. day/days, month/months, year/years, second/seconds, minute/minutes e hour/hours).
# esempio
proc myFormat {mySeconds} {
set result [clock format $mySeconds -format \
"Date: %A %d %B %Y\nTime: %H:%M:%S"]
return $result
}
puts "Now\n[myFormat [clock seconds]]"
puts "\nAdd 2 days 3 months 1 year -1 hour 1 minute and 10 seconds"
puts "[myFormat [clock add [clock seconds]\
2 days\
3 months\
1 year\
-1 hour\
1 minute\
10 seconds]]"
---
Now
Date: Tuesday 22 September 2026
Time: 11:43:31
Add 2 days 3 months 1 year -1 hour 1 minute and 10 seconds
Date: Friday 24 December 2027
Time: 10:44:41
Nel prossimo articolo impareremo a lavorare con un database.