Date
| Fiche express | |
|---|---|
| Type | Commande Linux, affichage/calcul de dates et timestamps |
| Voir aussi | Hwclock · Ntp |
Usages avancés de la commande date (GNU coreutils) : formatage, calcul
relatif, conversion de timestamps Unix. Cette page couvre la commande générique, pas un
service — elle est rassemblée ici parce qu'elle est systématiquement utilisée en pratique
pour vérifier/manipuler l'heure aux côtés de Ntp et Hwclock.
Formatage
date +"%Y%m%d%H%M%S" date +"%d-%m-%Y %H:%M:%S"
Dates relatives
date --date '1 hour ago' '+%H' date --date 'tomorrow' date --date 'yesterday' date -d '2 weeks ago Saturday' +%Y-%m-%d date +"%Y%m%d%H%M%S" --date '1 day ago' date --date '1 month' date --utc
Modifier la date système
date -s "05/12/2012 14:00" date --set="Wed Oct 28 13:53:00"
Après un réglage manuel de l'heure système, penser à répercuter le changement sur l'horloge
matérielle avec hwclock --systohc — voir Hwclock.
Timestamps Unix
Convertir la date courante en timestamp :
date +%s
Timestamp d'une date précise :
date -d "2011-08-31 23:39:36" +%s
Convertir un timestamp en date lisible :
date -d @1314826776
Afficher le nom du jour en français (nécessite une locale française installée) :
export LANG=fr_FR.UTF8 date +%A
Formatage de chiffres (usage connexe)
Complément à zéro d'un nombre, utile en scripting à côté de date (ex. compteurs de
lignes/séquences) :
Nblign=$(printf "%.8d" "$NBLIGN")
Fonctions shell utilitaires
Conversion date ↔ timestamp et calcul de différence entre deux dates, réutilisables dans un script :
date2stamp () {
date --utc --date "$1" +%s
}
stamp2date (){
date --utc --date "1970-01-01 $1 sec" "+%Y-%m-%d %T"
}
dateDiff (){
case $1 in
-s) sec=1; shift;;
-m) sec=60; shift;;
-h) sec=3600; shift;;
-d) sec=86400; shift;;
*) sec=86400;;
esac
dte1=$(date2stamp "$1")
dte2=$(date2stamp "$2")
diffSec=$((dte2-dte1))
if ((diffSec < 0)); then abs=-1; else abs=1; fi
echo $((diffSec/sec*abs))
}
dateDiff -d "2006-10-01" "2006-10-32"
Exemple d'utilisation en filtre, comptant les dates JJ/MM/AAAA lues sur l'entrée
standard postérieures à une date de référence donnée en argument :
#!/bin/bash
DATE=$(date -d "$3-$2-$1 01" '+%s')
COUNT=0
tr '/' ' ' | {
while read D M Y ; do
THIS=$(date -d "$Y-$M-$D 01" '+%s')
if (( THIS > DATE )) ; then
COUNT=$((COUNT + 1))
fi
done
echo $COUNT
}
Appel :
for D in $(seq 19 25) ; do echo $D/08/2007 ; done | ./count.sh 22 08 2007
Pour aller plus loin
- http://hrop.fresse.org/dateutils/ —
dateutils, suite d'utilitaires dédiés au
calcul sur les dates, plus riche que date seul pour les traitements par lots.