{{tag>date Temps Script Python}} = Utilisation de la commande date // Source : http://www.jacksay.com/tutoriaux/bash-shell/bashshell-utilisation-commande-date.html // Pense-bête pour l'utilisation de la commande date en bash / shell. 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 : date retourne mardi 17 novembre 2009, 06:55:32 (UTC+0100) 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://fr.wikipedia.org/wiki/Heure_Unix * https://fr.wikipedia.org/wiki/Epoch Timestamp Epoch maintenant date +%s Convertir un timestamp Epoch dans un format lisible date -d @1447070995 Le timestamp d'une date précise : date -d "2011-08-31 23:39:36" +%s == Changer manuellement l'heure du système Heure locale date -s "2015-06-06 12:12" Heure UTC universelle date -u -s "2015-06-06 10:12" Et set the Hardware Clock to the current System Time #hwclock --systohc hwclock -w == Heure d'un autre fuseau horaire # Sous Debian, le fichier suivant doit exister : #ls /usr/share/zoneinfo/Africa/Djibouti env TZ=Africa/Djibouti date env TZ=':Africa/Djibouti' date == l'option -d Ensuite y'a la paramètre -d assez "marrant" qui permet ce genre de chose date -d 'now' # retourne mardi 17 novembre 2009, 06:57:53 (UTC+0100) date -d 'yesterday' # retourne lundi 16 novembre 2009, 06:58:32 (UTC+0100) date -d "tomorrow" # retourne mercredi 18 novembre 2009, 06:58:55 (UTC+0100) date -d "days" # retourne mardi 18 novembre 2009, 06:59:15 (UTC+0100) date -d "week" # retourne mardi 24 novembre 2009, 06:59:30 (UTC+0100) date -d "month" # retourne jeudi 17 décembre 2009, 06:59:59 (UTC+0100) date -d "year" # retourn mercredi 17 novembre 2010, 07:03:08 (UTC+0100) Ensuite on peut utiliser des précisions pour le nombre de jour/semaine/mois/année date -d "3 days" # retourne date 'now' + 3 jours 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 "2024-01-16 34 days ago" # Wed Dec 13 00:00:00 CET 2023 Redémarrer un serveur à une date précise shutdown -r -f $(( ($(date -d "2024-01-13" "+%s") - $(date -d "now" "+%s"))/60 )) == Mettre en forme la date Format ISO prédéfini $ date --iso-8601=second 2020-03-05T14:49:58+02:00 Enfin (je vais terminer la dessus), on peut mettre en forme la date un peu à la manière de date() en php date "+%Y-%m-%d" # 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 '+' et les caractères de substitutions sont toujours précédés d'un '%'. Pour obtenir par exemple en timestamp au format mysql ça donne date "+%Y-%m-%d %H:%M:%S" 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'année, si elle a 4 chiffres...) === 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à pour les principaux patterns Sachez enfin qu'un cumule de -d "durée" et de "+%PATTERN" est possible et cela s'avère parfois assez pratique : 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 date "+%V" Numéro de la semaine à une date précise LANG=C date --date="2016-08-16" +"%V" === bash calculate time elapsed between two date timestamps Source : https://gist.github.com/tuxfight3r/1c11479813bc5ec48fd2e5e648c43384 #!/bin/bash date1="2023-02-08 10:50:33" date2="2023-02-08 14:10:33" date1_seconds=$(date -d "$date1" +"%s") date2_seconds=$(date -d "$date2" +"%s") duration=$(( $date2_seconds - $date1_seconds )) echo "Time Elapsed: $(($duration/3600)) hours $(($duration %3600 / 60)) minutes and $(($duration % 60)) seconds." == Autres date --rfc-2822 Tue, 15 Sep 2015 14:48:21 +0200 date --rfc-3339=date 2023-03-31 env TZ=Europe/Paris date --rfc-3339=second -d '2023-08-23 21:50' 2023-08-23 21:50:00+02:00 date --rfc-email === Python #! /usr/bin/env python3 import os import subprocess my_env = {**os.environ, 'TZ': 'Europe/Paris'} with open(filename, mode="w") as f: subprocess.run(["date"], shell=False, check=True, stdout=f, env=my_env)