Comandes LinuxInformació del sistema LinuxLinux

La comanda date a Linux: mostrar, formatar i calcular dates



La comanda date mostra la data i l’hora del sistema i permet donar-los el format que vulguis, calcular dates (demà, fa tres dies, d’aquí a dues setmanes) i convertir marques de temps. També pot canviar l’hora del rellotge, tot i que en els sistemes actuals això es fa millor amb timedatectl. És una de les comandes més útils en scripts, per exemple per posar la data al nom d’una còpia de seguretat.

Sintaxi

date [opcions] [+format]

Sense res, mostra la data i l’hora actuals. Si hi afegeixes un argument que comença per +, la mostra amb aquest format.

Opcions més útils

OpcióQuè fa
+formatMostra la data amb el format indicat (vegeu la taula de formats)
-d text, --date=textMostra la data descrita pel text en lloc de l’actual: tomorrow, 3 days ago, 2026-12-25, @1700000000…
-u, --utcMostra (o estableix) l’hora en UTC
-I[precisió]Format ISO 8601: -I (només la data), -Iseconds, -Iminutes…
-RFormat RFC 5322, el dels correus electrònics
-r fitxerMostra la data de l’última modificació del fitxer
-f fitxerCom -d, però per a cada línia del fitxer
-s text, --set=textCanvia l’hora del sistema (cal ser root)

Formats més habituals

FormatSignificatExemple
%YAny amb quatre xifres2026
%mMes (01-12)10
%dDia del mes (01-31)04
%H / %M / %SHora / minut / segon08 / 05 / 03
%FData completa, igual que %Y-%m-%d2026-10-04
%THora completa, igual que %H:%M:%S08:05:03
%A / %aNom del dia de la setmana / abreujatSunday / Sun
%B / %bNom del mes / abreujatOctober / Oct
%uDia de la setmana (1 = dilluns, 7 = diumenge)7
%jDia de l’any (001-366)277
%VNúmero de setmana ISO40
%sSegons des de l’1 de gener de 1970 (temps Unix)1791093903
%NNanosegons000000000
%Z / %zZona horària / desplaçament respecte a UTCCEST / +0200

Els noms dels dies i dels mesos surten en l’idioma del sistema (aquí, en anglès).

Exemples

Data i hora actuals

$ date
Sun  4 Oct 08:59:59 CEST 2026

$ date -u
Sun  4 Oct 06:59:59 UTC 2026

Amb format

$ date "+%Y-%m-%d %H:%M:%S"
2026-10-04 08:59:59

$ date +%d/%m/%Y
04/10/2026

$ date -I
2026-10-04

$ date -Iseconds
2026-10-04T08:59:59+02:00

Si el format té espais, posa’l entre cometes.

La data al nom d’un fitxer

L’ús més habitual en scripts. Amb %F els noms queden ordenats cronològicament:

tar -czf copia_$(date +%F).tar.gz ~/Documents
cp registre.log registre_$(date +%F_%H%M).log

Calcular dates

$ date -d tomorrow +%F
2026-10-05

$ date -d "3 days ago" +%F
2026-10-01

$ date -d "+2 weeks" +%F
2026-10-18

$ date -d "next monday" +%F
2026-10-05

$ date -d 2026-12-25 +%A
Friday

Quants dies falten per a una data (restant els segons Unix):

$ echo $(( ($(date -d 2026-12-25 +%s) - $(date -d 2026-10-04 +%s)) / 86400 ))
82

Convertir un temps Unix en una data llegible

Molts registres i bases de dades guarden l’hora en segons des de 1970. Per llegir-los, posa-hi una @ al davant:

$ date -d @1700000000
Tue 14 Nov 23:13:20 CET 2023

L’hora en una altra zona horària

Amb la variable TZ només per a aquella comanda:

$ TZ=America/New_York date
Sun  4 Oct 02:59:59 EDT 2026

Quan es va modificar un fitxer

date -r informe.txt

Mesurar quant triga un script

inici=$(date +%s)
# ... feina ...
fi=$(date +%s)
echo "Ha trigat $((fi - inici)) segons"

Canviar l’hora del sistema

date encara permet canviar el rellotge:

sudo date --set="2026-10-04 15:45:00"

Però en una distribució actual amb systemd (Debian, Ubuntu, Fedora, Rocky…), l’hora la gestiona timedatectl i, normalment, està sincronitzada per internet amb NTP. Si canvies l’hora a mà amb date, el servei de sincronització (systemd-timesyncd o chrony) la tornarà a corregir. La manera recomanada és:

# Veure l'estat: hora local, UTC, zona horària i si està sincronitzada
timedatectl

# Si de debò necessites posar l'hora a mà, primer desactiva la sincronització
sudo timedatectl set-ntp false
sudo timedatectl set-time "2026-10-04 15:45:00"

La sortida de timedatectl té aquest aspecte:

               Local time: Sun 2026-10-04 08:59:59 CEST
           Universal time: Sun 2026-10-04 06:59:59 UTC
                 RTC time: n/a
                Time zone: Europe/Madrid (CEST, +0200)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

Gairebé sempre, si l’hora està malament el problema és la zona horària o la sincronització, no el rellotge: arregla-ho amb timedatectl set-timezone o revisant el servei NTP.

Compte amb…

  • %m i %M: %m és el mes i %M, els minuts. És l’error més habitual.
  • Formats en scripts: el format per defecte de date depèn de l’idioma i pot canviar d’un sistema a un altre. En scripts, fes servir sempre un format explícit (+%F, -I…).
  • -d és de GNU: a macOS i als BSD, date -d no funciona igual (allà es fa servir -v i -j).

Comandes relacionades