Gestion des dates en bash

La commande date par défaut donne la date du jour au format utc dans votre fuseau horaire.

Codedate


donne le résultat suivant
Citationuser:~# date
jeudi 16 juillet 2009, 15:12:30 (UTC+0200)


Pour formater la date du jours dans un motif donné, utiliser la syntaxe suivante
Codedate '+%d-%m-%Y'


Pour faire des opérations arithmétique, par exemple, obtenir le jour précédent
Codedate '+%d-%m-%Y' --date '1 days ago'


Pour obtenir le jour suivant
Codedate '+%d-%m-%Y' --date '1 days'



Formatage d'une date en bash

Le formatage de date en bash est légèrement plus compliqué, voici le détail de la syntaxe

Codedate -d"<dateChoisi> <OptionCalcul>" +"<format>"


  • dateChoisi : date à formater
  • OptionCalcul : option de calcul, pour 2 jours après, mettre "2 days", pour 2 jours avant, mettre "2 days ago"
  • format : format voulu pour l'affichage, le détail des options dispo est dans le man


Pour plus de facilité , voici un exemple
Codedate -d"01/08/2010 2 days" +"%d%Y"



Il est aussi possible d'afficher des caractères spéciaux (type saut de ligne etc ...)
La commande suivante, vous permet d'afficher la date du jour sur 2 lignes (via le %n), en utilisant une tabulation ( %t ) sur la seconde ligne
Codedate '+%d %B%n%m%t%Y'


Celle ci donnera le résultat suivant
Codeuser:~# date '+%d %B%n%m%t%Y'

16 juillet

07 2009


Enfin, certains opérateurs vous permettent de ne pas afficher les 0 finaux de chaque nombre.

Voici quelques exemples,

utiliser le - avant le % pour afficher la date sans les 0
Codeuser:~# date '+%d|%m|%Y'

16|07|2009

user:~# date '+%d|%-m|%Y'

16|7|2009


utiliser le _ avant le % pour afficher la date en remplaçant les 0 par des espaces.
Codeuser:~# date '+%d|%m|%Y'

16|07|2009

user:~# date '+%d|%_m|%Y'

16| 7|2009


Astuces

Pour mettre la date en anglais en bash (en français, mettre fr_FR à la place de en_EN), vu que le man n'aide pas trop :

dans votre script mettre
Code#!/bin/sh

export LC_ALL=en_EN.UTF-8

jour=`date --date '1 days ago' '+%d/%b'`



pour debugger, mettre la commande "locale" dans votre sh qui donne la langue courante utiliser dans votre script.


Pour compléter , voici la liste des directives possible pour la gestion des dates, équivalente à ce qu'on pourrait trouver dans un man

Citation
Champs horaires :

%H heure (00..23)
%I heure (01..12)
%k heure ( 0..23)
%l heure ( 1..12)
%M minute (00..59)
%p notation locale pour AM ou PM.
%r heure actuelle (sur 12 heures) (hh:mm:ss [AP]M)
%s secondes écoulées depuis le 01-01-1970 à 00:00:00
T.U (extension non standard)
%S secondes (00..61)
%T heure actuelle, (sur 24 heures) (hh:mm:ss)
%X représentation locale de l'heure (%H:%M:%S)
%Z fuseau horaire (par ex. MET), ou rien si le fuseau
horaire n'est pas déterminé

Champs de date :

%a abréviation locale du jour de la semaine (Sun..Sat)
%A nom local du jour de la semaine (Sunday..Saturday)
%b abréviation locale du nom du mois (Jan..Dec)
%B nom local du mois (January..December)
%c date et heure locales (Sat Nov 04 12:02:33 EST
1989)
%d jour du mois (01..31)
%D date (mm/jj/aa)
%h comme %b
%j jour de l'année (001..366)
%m mois (01..12)
%U numéro de semaine dans l'année (00..53). La semaine
commence le Dimanche.
%w Jour de la semaine (0..6). Le 0 correspond au
Dimanche.
%W numéro de semaine dans l'année (00..53). La semaine
commence le Lundi.
%x représentation locale de la date (mm/jj/aa)
%y deux derniers chiffres de l'année (00..99)
%Y année (1970...)

Par défaut, "date" complète les champs numériques avec des
zéros. La version GNU de date dispose des options non
standards suivantes :

- (tiret) ne pas compléter le champ
_ (souligne) remplir le champ avec des espaces

Champs particuliers

% un caractère % littéral.
%n saut de ligne
%t tabulation horizontale

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -