Date

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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

 calcul sur les dates, plus riche que date seul pour les traitements par lots.

Voir aussi

  • Hwclock — horloge matérielle
  • Ntp — synchronisation continue de l'horloge système