programmazione
date La gestione delle date e degli orari è una funzionalità fondamentale in moltissime applicazioni. Free Pascal e Lazarus mettono a disposizione strumenti potenti che consentono di ottenere la data corrente, eseguire calcoli temporali, formattare le informazioni e confrontare facilmente date e orari.
home page

Gestione delle date e degli orari nelle applicazioni

Pubblicato il: 5-7-2026

Ultima Modifica: 5-7-2026

Introduzione

La gestione delle date e degli orari è una delle funzionalità più utilizzate nello sviluppo di applicazioni. Quasi ogni programma, infatti, ha la necessità di conoscere la data corrente, registrare un evento, calcolare intervalli di tempo o visualizzare informazioni in un formato leggibile.

Pensiamo ad esempio a:

  • 🗓️ un'agenda elettronica;

  • 📋 un gestionale clienti;

  • 💰 un programma di fatturazione;

  • 📁 un sistema di backup;

  • 📝 un registro delle attività (log);

  • ⏰ un cronometro o un timer.

Il linguaggio Pascal, insieme alle librerie di Free Pascal e Lazarus, mette a disposizione numerose funzioni che semplificano queste operazioni.

In questo articolo vedremo come utilizzare date e orari nelle proprie applicazioni con esempi pratici.


Il tipo TDateTime

In Free Pascal la maggior parte delle operazioni utilizza il tipo:

TDateTime

Questo tipo rappresenta contemporaneamente:

  • 📅 la data;

  • ⏰ l'ora.

Internamente è un numero reale:

  • la parte intera rappresenta il numero di giorni trascorsi da una data di riferimento;

  • la parte decimale rappresenta la frazione della giornata, cioè l'orario.

Fortunatamente non è necessario preoccuparsi di questo dettaglio: tutte le operazioni vengono gestite automaticamente dalle librerie.


Le unit da utilizzare

Per lavorare con date e orari è sufficiente includere:

 
uses
  SysUtils, DateUtils;

Le due unit contengono decine di funzioni già pronte.


Ottenere la data e l'ora correnti

La funzione più utilizzata è:

Now

Esempio:

 
uses
  SysUtils;

begin
  WriteLn(DateTimeToStr(Now));
end.

Possibile risultato:

05/07/2026 18:45:21

Ottenere solo la data

Per conoscere solamente la data corrente:

 
WriteLn(DateToStr(Date));

Risultato:

05/07/2026

Ottenere solo l'orario

Per visualizzare esclusivamente l'ora:

 
WriteLn(TimeToStr(Time));

Risultato:

18:45:21

Salvare una data in una variabile

 
var
  DataCorrente : TDateTime;

begin
  DataCorrente := Now;
end;

Da questo momento sarà possibile riutilizzarla in tutto il programma.


Convertire una data in una stringa

Spesso è necessario mostrare la data all'utente.

 
var
  S : String;

begin
  S := DateToStr(Date);
end;

Per data e ora:

 
S := DateTimeToStr(Now);

Convertire una stringa in data

L'operazione inversa è altrettanto semplice.

 
var
  D : TDateTime;

begin
  D := StrToDate('05/07/2026');
end;

Per data e ora:

 
D := StrToDateTime('05/07/2026 18:45:00');

⚠️ Se la stringa non è valida, verrà generata un'eccezione. È consigliabile utilizzare le funzioni TryStrToDate e TryStrToDateTime quando i dati provengono dall'utente.


Personalizzare il formato

Una funzione molto utile è:

FormatDateTime

Esempio:

 
WriteLn(
  FormatDateTime(
    'dd/mm/yyyy',
    Now));

Oppure:

 
WriteLn(
  FormatDateTime(
    'dddd dd mmmm yyyy',
    Now));

Possibile risultato:

Domenica 05 luglio 2026

Alcuni formati disponibili

Formato Significato
dd Giorno
mm Mese
yyyy Anno a quattro cifre
hh Ore
nn Minuti
ss Secondi
ddd Giorno abbreviato
dddd Nome completo del giorno
mmm Mese abbreviato
mmmm Nome completo del mese

Combinandoli si possono ottenere moltissimi formati diversi.


Estrarre giorno, mese e anno

Le singole parti della data possono essere ottenute facilmente.

 
var
  G, M, A : Word;

begin
  DecodeDate(Date, A, M, G);
end;

Dopo la chiamata:

G = Giorno

M = Mese

A = Anno

Estrarre ore, minuti e secondi

Per l'orario:

 
var
  H, N, S, MS : Word;

begin
  DecodeTime(Time,
             H,
             N,
             S,
             MS);
end;

Sommare giorni

Supponiamo di voler conoscere la data tra dieci giorni.

 
WriteLn(
  DateToStr(
    IncDay(Date,10)));

Oppure:

 
Scadenza := IncDay(Date,30);

Molto utile per scadenze e promemoria.


Sommare mesi

 
NuovaData :=
  IncMonth(Date,2);

La data verrà spostata avanti di due mesi.


Sommare anni

 
NuovaData :=
  IncYear(Date,1);

Ideale per calcolare scadenze annuali.


Calcolare la differenza tra due date

La libreria DateUtils offre numerose funzioni dedicate.

Numero di giorni:

 
Differenza :=
  DaysBetween(Data1, Data2);

Numero di mesi:

 
MonthsBetween(Data1, Data2);

Numero di anni:

 
YearsBetween(Data1, Data2);

Verificare se una data è valida

Quando l'utente inserisce una data è sempre bene controllarla.

 
var
  D : TDateTime;

begin
  if TryStrToDate(Edit1.Text,D) then
    ShowMessage('Data valida')
  else
    ShowMessage('Data non valida');
end;

Questo evita errori e rende l'applicazione più affidabile.


Confrontare due date

Le date possono essere confrontate come normali valori.

 
if Data1 > Data2 then
  ShowMessage('Più recente');

Oppure:

 
if Data1 = Data2 then
  ShowMessage('Stessa data');

Utilizzare data e ora nei nomi dei file

Una tecnica molto diffusa consiste nell'inserire la data nel nome di un file.

Esempio:

 
NomeFile :=
'Backup_' +
FormatDateTime(
'yyyymmdd_hhnnss',
Now) +
'.zip';

Risultato:

Backup_20260705_184521.zip

Questa soluzione evita la sovrascrittura accidentale dei file.


Registrare un file di log

Molte applicazioni salvano le operazioni eseguite.

Esempio:

05/07/2026 18:45:10
Accesso utente

05/07/2026 18:46:32
Backup completato

05/07/2026 18:47:15
Programma chiuso

Ogni riga può essere preceduta dalla data e dall'ora ottenute con Now.


Utilizzare un Timer

Nelle applicazioni grafiche Lazarus è disponibile il componente TTimer.

Può essere utilizzato per:

  • ⏰ aggiornare un orologio;

  • 📊 aggiornare dati periodicamente;

  • 🔄 eseguire backup automatici;

  • 📡 controllare la connessione di rete;

  • 💾 salvare automaticamente il lavoro.

Ad ogni intervallo viene eseguito l'evento OnTimer.


Alcune funzioni utili di DateUtils

La unit DateUtils contiene moltissime funzioni già pronte.

Tra le più utilizzate troviamo:

  • IncDay

  • IncMonth

  • IncYear

  • DaysBetween

  • MonthsBetween

  • YearsBetween

  • IsLeapYear

  • StartOfTheMonth

  • EndOfTheMonth

  • StartOfTheWeek

  • EndOfTheWeek

Queste funzioni evitano di dover eseguire calcoli complessi manualmente.


Errori comuni

Quando si lavora con date e orari è bene prestare attenzione ad alcuni aspetti.

❌ Salvare le date come semplici stringhe.

❌ Non verificare l'input dell'utente.

❌ Ignorare il formato locale della data.

❌ Effettuare calcoli manuali sui giorni senza utilizzare le funzioni dedicate.

Utilizzare TDateTime e le funzioni di DateUtils rende il codice più semplice, leggibile e meno soggetto a errori.


Conclusione

La gestione delle date e degli orari è una funzionalità fondamentale in moltissime applicazioni. Free Pascal e Lazarus mettono a disposizione strumenti potenti che consentono di ottenere la data corrente, eseguire calcoli temporali, formattare le informazioni e confrontare facilmente date e orari.

Sfruttando le unit SysUtils e DateUtils è possibile realizzare software più completo, affidabile e professionale, evitando di reinventare soluzioni già disponibili e concentrate sulle reali esigenze dell'applicazione.