tech:bashshell-utilisation-commande-date
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| tech:bashshell-utilisation-commande-date [2025/03/24 15:06] – créée - modification externe 127.0.0.1 | tech:bashshell-utilisation-commande-date [2026/06/07 19:12] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | < | ||
| + | {{tag> | ||
| + | |||
| + | # Utilisation de la commande date | ||
| + | |||
| + | // Source : http:// | ||
| + | |||
| + | Pense-bête pour l' | ||
| + | |||
| + | Petit pense-bête pour les manipulations de date en Bash/shell. | ||
| + | |||
| + | ## Bases | ||
| + | |||
| + | ** Il vaut mieux utiliser la notation `YYYY-MM-DD` à la place de `MM/DD/YY` qui est équivoque.** | ||
| + | |||
| + | Retourne la date du jour avec les règles de localisation de la machine, par exemple pour une bécane Franco-française : | ||
| + | ~~~bash | ||
| + | date | ||
| + | ~~~ | ||
| + | |||
| + | retourne mardi 17 novembre 2009, 06:55:32 (UTC+0100) | ||
| + | |||
| + | |||
| + | |||
| + | ~~~bash | ||
| + | date | ||
| + | # | ||
| + | # Si la date et/ou l’heure sont fausses, faire : | ||
| + | # (MM = mois, DD = jour, hh =heures, mm = minutes, YY = année, ss = secondes : toutes les valeurs sont sur 2 chiffres) | ||
| + | date MMDDhhmmYY.ss | ||
| + | hwclock --systohc | ||
| + | ~~~ | ||
| + | |||
| + | ## Epoch Timestamp - Temps UNIX - Heure UNIX - POSIX timestamp | ||
| + | |||
| + | Voir | ||
| + | * https:// | ||
| + | * https:// | ||
| + | |||
| + | |||
| + | Timestamp Epoch maintenant | ||
| + | ~~~bash | ||
| + | date +%s | ||
| + | ~~~ | ||
| + | |||
| + | Convertir un timestamp Epoch dans un format lisible | ||
| + | ~~~bash | ||
| + | date -d @1447070995 | ||
| + | ~~~ | ||
| + | |||
| + | Le timestamp d'une date précise : | ||
| + | ~~~bash | ||
| + | date -d " | ||
| + | ~~~ | ||
| + | |||
| + | ## Changer manuellement l' | ||
| + | |||
| + | Heure locale | ||
| + | ~~~bash | ||
| + | date -s " | ||
| + | ~~~ | ||
| + | |||
| + | Heure UTC universelle | ||
| + | ~~~bash | ||
| + | date -u -s " | ||
| + | ~~~ | ||
| + | |||
| + | Et set the Hardware Clock to the current System Time | ||
| + | ~~~bash | ||
| + | #hwclock --systohc | ||
| + | hwclock -w | ||
| + | ~~~ | ||
| + | ## Heure d'un autre fuseau horaire | ||
| + | |||
| + | ~~~bash | ||
| + | # Sous Debian, le fichier suivant doit exister : | ||
| + | #ls / | ||
| + | |||
| + | env TZ=Africa/ | ||
| + | env TZ=': | ||
| + | ~~~ | ||
| + | |||
| + | ## l' | ||
| + | |||
| + | Ensuite y'a la paramètre -d assez " | ||
| + | |||
| + | date -d ' | ||
| + | # retourne mardi 17 novembre 2009, 06:57:53 (UTC+0100) | ||
| + | | ||
| + | date -d ' | ||
| + | # retourne lundi 16 novembre 2009, 06:58:32 (UTC+0100) | ||
| + | | ||
| + | date -d " | ||
| + | # retourne mercredi 18 novembre 2009, 06:58:55 (UTC+0100) | ||
| + | | ||
| + | date -d " | ||
| + | # retourne mardi 18 novembre 2009, 06:59:15 (UTC+0100) | ||
| + | | ||
| + | date -d " | ||
| + | # retourne mardi 24 novembre 2009, 06:59:30 (UTC+0100) | ||
| + | | ||
| + | date -d " | ||
| + | # retourne jeudi 17 décembre 2009, 06:59:59 (UTC+0100) | ||
| + | | ||
| + | date -d " | ||
| + | # retourn mercredi 17 novembre 2010, 07:03:08 (UTC+0100) | ||
| + | | ||
| + | Ensuite on peut utiliser des précisions pour le nombre de jour/ | ||
| + | | ||
| + | date -d "3 days" | ||
| + | # retourne date ' | ||
| + | | ||
| + | date -d "2 week" | ||
| + | # Retourne la date dans 2 semaines | ||
| + | | ||
| + | Bon etc, ça marche pour jour, semaine, mois année, ensuite on peut ajouter le mot ago pour afficher la date passé. | ||
| + | | ||
| + | date -d "1 month ago" | ||
| + | # retourne la date il y a un mois | ||
| + | |||
| + | Pareil, ça marche pour les jours, semaines, mois et années | ||
| + | |||
| + | Ajouter un nombre de jours à une date précise | ||
| + | |||
| + | date -d " | ||
| + | # Wed Dec 13 00:00:00 CET 2023 | ||
| + | |||
| + | Redémarrer un serveur à une date précise | ||
| + | ~~~bash | ||
| + | shutdown -r -f $(( ($(date -d " | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ## Mettre en forme la date | ||
| + | |||
| + | Format ISO prédéfini | ||
| + | ~~~ | ||
| + | $ date --iso-8601=second | ||
| + | 2020-03-05T14: | ||
| + | ~~~ | ||
| + | |||
| + | Enfin (je vais terminer la dessus), on peut mettre en forme la date un peu à la manière de date() en php | ||
| + | |||
| + | date " | ||
| + | # retourn ANNEE-MOIS-JOUR | ||
| + | |||
| + | Notez que la chaine de caractère (pattern de format) doit être rédigé de façon assez précise, elle commence par un ' | ||
| + | |||
| + | Pour obtenir par exemple en timestamp au format mysql ça donne | ||
| + | |||
| + | date " | ||
| + | |||
| + | Voici un petit tour rapide des patterns supportés (les principaux) | ||
| + | |||
| + | ### Année | ||
| + | |||
| + | * **%Y** : Année sur 4 chiffres | ||
| + | * **%C** : Le siècle (en gros les 2 premiers chiffres de l' | ||
| + | |||
| + | ### Mois | ||
| + | |||
| + | * **%b** : Nom du mois sur 3 lettres | ||
| + | * **%B** : Nom du mois | ||
| + | * **%m** : Numéro du mois sur 2 chiffres | ||
| + | |||
| + | ### Semaine (numéro) | ||
| + | |||
| + | * **%V** : Numéro de la semaine | ||
| + | |||
| + | ### Jours | ||
| + | |||
| + | * **%a** : Nom du jour de la semaine sur 3 lettres | ||
| + | * **%A** : Nom du jour de la semaine | ||
| + | * **%d** : Numéro du jour dans le mois sur 2 chiffres | ||
| + | * **%j** : Numéro du jour dans l' année | ||
| + | |||
| + | ### Heures | ||
| + | |||
| + | * **%H** : Heures sur 24 heures | ||
| + | * **%I** : Heures sur 12 heures | ||
| + | |||
| + | ### Minutes | ||
| + | |||
| + | * **%M** : Minutes sur 2 chiffres | ||
| + | |||
| + | ### Secondes | ||
| + | |||
| + | * **%S** : Secondes sur 2 chiffres | ||
| + | |||
| + | ### Raccourcis | ||
| + | |||
| + | * **%F** : YYYY-MM-DD | ||
| + | * **%T** : HH-MM-SS | ||
| + | |||
| + | Voilà | ||
| + | |||
| + | |||
| + | Sachez enfin qu'un cumule de -d " | ||
| + | |||
| + | date -d "2 week" "+%F %T" | ||
| + | # Retourne un timestamp MySQL du jour qu'il sera dans 2 semaines | ||
| + | |||
| + | Pour plus de détails : **man date** | ||
| + | |||
| + | ### Exemple numéro de la semaine | ||
| + | |||
| + | Numéro de la semaine courante | ||
| + | ~~~bash | ||
| + | date " | ||
| + | ~~~ | ||
| + | |||
| + | Numéro de la semaine à une date précise | ||
| + | ~~~bash | ||
| + | LANG=C date --date=" | ||
| + | ~~~ | ||
| + | |||
| + | ### bash calculate time elapsed between two date timestamps | ||
| + | |||
| + | Source : https:// | ||
| + | |||
| + | ~~~bash | ||
| + | #!/bin/bash | ||
| + | date1=" | ||
| + | date2=" | ||
| + | date1_seconds=$(date -d " | ||
| + | date2_seconds=$(date -d " | ||
| + | duration=$(( $date2_seconds - $date1_seconds )) | ||
| + | echo "Time Elapsed: $(($duration/ | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ## Autres | ||
| + | |||
| + | |||
| + | ~~~ | ||
| + | date --rfc-2822 | ||
| + | Tue, 15 Sep 2015 14:48:21 +0200 | ||
| + | |||
| + | date --rfc-3339=date | ||
| + | 2023-03-31 | ||
| + | |||
| + | env TZ=Europe/ | ||
| + | 2023-08-23 21: | ||
| + | ~~~ | ||
| + | |||
| + | ~~~bash | ||
| + | date --rfc-email | ||
| + | ~~~ | ||
| + | |||
| + | ### Python | ||
| + | |||
| + | ~~~python | ||
| + | #! / | ||
| + | |||
| + | import os | ||
| + | import subprocess | ||
| + | |||
| + | my_env = {**os.environ, | ||
| + | with open(filename, | ||
| + | subprocess.run([" | ||
| + | ~~~ | ||
| + | |||
