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 |
|---|---|
+format | Mostra la data amb el format indicat (vegeu la taula de formats) |
-d text, --date=text | Mostra la data descrita pel text en lloc de l’actual: tomorrow, 3 days ago, 2026-12-25, @1700000000… |
-u, --utc | Mostra (o estableix) l’hora en UTC |
-I[precisió] | Format ISO 8601: -I (només la data), -Iseconds, -Iminutes… |
-R | Format RFC 5322, el dels correus electrònics |
-r fitxer | Mostra la data de l’última modificació del fitxer |
-f fitxer | Com -d, però per a cada línia del fitxer |
-s text, --set=text | Canvia l’hora del sistema (cal ser root) |
Formats més habituals
| Format | Significat | Exemple |
|---|---|---|
%Y | Any amb quatre xifres | 2026 |
%m | Mes (01-12) | 10 |
%d | Dia del mes (01-31) | 04 |
%H / %M / %S | Hora / minut / segon | 08 / 05 / 03 |
%F | Data completa, igual que %Y-%m-%d | 2026-10-04 |
%T | Hora completa, igual que %H:%M:%S | 08:05:03 |
%A / %a | Nom del dia de la setmana / abreujat | Sunday / Sun |
%B / %b | Nom del mes / abreujat | October / Oct |
%u | Dia de la setmana (1 = dilluns, 7 = diumenge) | 7 |
%j | Dia de l’any (001-366) | 277 |
%V | Número de setmana ISO | 40 |
%s | Segons des de l’1 de gener de 1970 (temps Unix) | 1791093903 |
%N | Nanosegons | 000000000 |
%Z / %z | Zona horària / desplaçament respecte a UTC | CEST / +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…
%mi%M:%més el mes i%M, els minuts. És l’error més habitual.- Formats en scripts: el format per defecte de
datedepè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 -dno funciona igual (allà es fa servir-vi-j).
Comandes relacionades
- Canviar la zona horària a Linux.
- Com saber si es fa servir NTP per sincronitzar el rellotge.
touch: canviar la data de modificació d’un fitxer.find: cercar fitxers per data.tar: còpies de seguretat amb la data al nom.