timecalc - effectuer des calculs de dates et de dur�s.
timecalc
effectue des calculs de dates et de dur�s en combinant les deux types de donn�s.
Sauf mention contraire, chaque fois qu'il est employ�dans ce document, le terme date doit s'entendre au sens
*nix
de la chose. C'est �dire un rep�e dans le temps, ayant comme point de d�art le premier janvier 1970 �z�o heure. Le temps est d�ompt��partir de ce rep�e seconde par seconde.
timecalc
�alue des expressions contenant des dates, des dur�s, des nombres et des op�ateurs. Il produit en r�ultat, soit une nouvelle date, si l'expression contient au moins une date, soit une dur� si l'expression ne contient aucune date ou si l'expression contient une soustraction entre deux dates.
Il y a trois possibilit� pour fournir les expressions a �aluer �
timecalc
: Soit sur l'entr� standard ; soit sur la ligne de commande, en les introduisant avec l'option -e et dans ce cas il est prudent de mettre l'expression entre apostrophes afin d'�iter l'interpr�ation des caract�es sp�iaux par le shell ; soit enfin, en �rivant les expressions dans un fichier et en demandant �
timecalc
de lire ce fichier avec l'option -f.
Les expressions que l'on fournit �timecalc doivent �re r�ig�s en respectant la grammaire suivante, d�rite �l'aide d'une notation BNF simplifi� :
r�ultat ::= date-calcul� [format-sortie] ;
| nb-mois [format-sortie] ;
| nb-secondes [format-sortie] ;
date-calcul� ::= date
| date-calcul� + nb-mois
| date-calcul� - nb-mois
| date-calcul� + nb-secondes
| date-calcul� - nb-secondes
| ( date-calcul� )
nb-mois ::= mois
| nb-mois + nb-mois
| nb-mois - nb-mois
| NOMBRE * nb-mois
| nb-mois / NOMBRE
| ( nb-mois )
nb-secondes ::= secondes
| nb-secondes + nb-secondes
| nb-secondes - nb-secondes
| NOMBRE * nb-secondes
| nb-secondes / NOMBRE
| date-calcul� - date-calcul�
| ( nb-secondes )
date ::= NOW
| CHAINE-DATE [format-entr�]
mois ::= NOMBRE MON
| NOMBRE MONTH
| NOMBRE YEAR
secondes ::= NOMBRE SEC
| NOMBRE SECOND
| NOMBRE MIN
| NOMBRE MINUTE
| NOMBRE HOUR
| NOMBRE DAY
| NOMBRE WEEK
format-sortie ::= [WITH] OUTPUT FORMAT CHAINE-DE-FORMAT
format-entr� ::= [WITH] INPUT FORMAT CHAINE-DE-FORMAT
Dans la grammaire d�rite ci-dessus, les mots en MAJUSCULE ainsi que les op�ateurs sont les ��ents terminaux du langage. Attention, cependant, les ��ents terminaux s'�rivent en minuscule.
Dans la grammaire d�rite ci dessus les ��ents entre crochets sont optionnels.
L'��ent terminal NOMBRE correspond aux nombres entr�. Il sagit d'entiers non sign�.
Les ��ents terminaux CHAINE-DATE et CHAINE-DE-FORMAT correspondent aux cha�es de caract�es entr�s. Les chaines s'�rivent entre guillemets.
les ��ents terminaux YEAR, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND peuvent s'�rire au pluriel.
les ��ents terminaux MON, MIN, SEC sont les abr�iations respectives de MONTH, MINUTE SECOND.
L'��ent terminal NOW correspond a la date syst�e.
FORMATAGE DES DATES EN SORTIE.
-
Le format de sortie des dates est par d�aut le format d�ini par l'ISO. C'est �dire : Jour Mois quanti�e heure : minutes : secondes si�le ann�. Il correspond �l'utilisation de l'indicateur de conversion %c de la fonction
strftime(3)
(Voir ci dessous les liens qui unissent timecalc �strftime(3)
)
Il est possible de modifier le format de sortie des dates de deux fa�ns :
soit globalement, soit expression par expression.
La modification globale du format de sortie des dates s'obtient avec l'option -o suivie d'une cha�e de format. La cha�e de format doit dans ce cas commencer par l'identifiant
datef=
La modification du format de sortie des dates expression par expression, s'obtient en ajoutant la phrase
[with] output format chaine_de_format
apr� l'expression (le mot
with
est optionnel).
Que ce soit celles que l'on fournit via l'option -o ou celles que l'on fournit expression par expression, les cha�es de format de date sont compos�s �l'aide des m�es indicateurs de conversion que ceux que l'on fournit �la fonction
strftime(3).
Par exemple, "%d%m%y" correspond �jour/mois/ann� (2 chiffres). Reportez vous �la page de manuel de
strftime(3)
pour obtenir tout les d�ails sur les possibilit� de formatage.
FORMATAGE DES DUR�S EN SORTIE.
-
Le format de sortie des dur�s par d�aut est le suivant : "<nombre de jours> days <nombre d'heures> hours <nombre de minutes> minutes <nombre de secondes> seconds".
Comme pour les dates, il est �alement possible de modifier le format de sortie des dur�s de deux fa�ns :
soit globalement, soit expression par expression.
La modification globale du format de sortie des dur�s s'obtient comme pour le formatage des dates, avec l'option -o. Dans ce cas la cha�e de format doit commencer, soit par l'identifiant
durationf=
, soit par l'identifiant
fuzzyf=
l'identifiant
durationf=
permet de d�inir la chaine de format destin� �l'affichage des dur�s pr�ises. Alors que l'identifiant
fuzzyf=
permet de d�inir la chaine de format destin� �l'affichage des dur�s floues (voir BOGUES pour une explication de la diff�ence entre ces deux types de dur�s).
La modification du format de sortie des dur�s expression par expression, s'obtient comme pour les dates en ajoutant la phrase
[with] output format chaine_de_format
apr� l'expression (le mot
with
est optionnel).
Que ce soit celles que l'on fournit via l'option -o ou celles que l'on fournit expression par expression, les cha�es de format de dur� sont compos�s �l'aide d'indicateurs de conversion semblables �ceux que l'on utilise pour les cha�es de format de date. Comme pour les cha�es de format de date, les indicateurs de conversion sont introduits par le caract�e `%' et sont remplac�, dans la sortie comme ceci :
- %y
-
Le nombre d'ann�s du r�ultat (flou)
- %m
-
Le nombre de mois du r�ultat (flou)
- %W
-
Le nombre de semaines du r�ultat (pr�is)
- %D
-
Le nombre de jours du r�ultat (pr�is)
- %H
-
Le nombre d'heures du r�ultat (pr�is)
- %M
-
Le nombre de minutes du r�ultat (pr�is)
- %S
-
Le nombre de secondes du r�ultat (pr�is)
Par exemple, "%d %m" correspond �jour mois.
Attention ! Il n'est pas possible de m�anger des indicateurs de conversion produisant des valeurs floues et des indicateurs de conversion produisant des valeurs exactes dans la m�e cha�e de format. Si cela est fait, le r�ultat n'est simplement pas affich�
FORMATAGE DES DATES EN ENTR�.
-
Le format des dates en entr� est par d�aut : "ann�(4 chiffres)/mois/jour heure/minutes/secondes".
Comme pour les dates et les dur�s, il est possible de modifier le format d'entr� des dates de deux fa�ns : soit globalement, soit expression par expression.
La modification globale du format d'entr� s'obtient avec l'option -i.
La modification du format d'entr� des dates expression par expression, s'obtient en ajoutant la phrase
[with] input format chaine_de_format
apr� la chaine de date (le mot
with
est optionnel).
Que ce soit celles que l'on fournit via l'option -i ou celles que l'on fournit expression par expression, les cha�es de format d'entr� sont compos�s �l'aide d'indicateurs de conversion identiques �ceux que l'on utilise pour les cha�es de format de dur�. Comme pour les cha�es de format de dur�, les indicateurs de conversion sont introduits par le caract�e `%'. Chaque indicateur de conversion doit correspondre �une valeur dans la cha�e de date. Les autres caract�es tels que les `/' doivent correspondre caract�e pour caract�e dans la cha�e de date.
Les indicateurs de conversion disponibles sont les suivants :
- %y
-
L'ann� de la date sans le si�le.
- %Y
-
L'ann� de la date avec le si�le.
- %m
-
Le mois de la date
- %d
-
Le jour de la date
- %H
-
L'heure de la date
- %M
-
Les minutes de la date
- %S
-
Les secondes de la date
Si l'on d�ire utiliser un caract�e `%' dans le format d'entr� il suffit de le doubler (%%).
Par exemple, "%d/%m/%Y" accepte des dates compos�s du jour du mois et de l'ann� avec le si�le. Le tout s�ar�par des `/'.
Globalement, le comportement de timecalc avec les formats d'entr� est similaire au comportment de
scanf(3)
INITIALISATION et COMPLETION
-
Les indicateurs de position absents du format d'entr� sont valoris� �z�o (ou 1 pour le mois)
Une ann� valoris� �z�o provoquera une erreur par d�assement de capacit�des routines de manipulation de date syst�e.
Si l'option -c est positionn� et si les indicateurs de conversion absents du format d'entr� sont : Soit tous les indicateurs d�rivant une date (au sens calendaire, cette fois, donc les indicateurs de jour, mois et ann�) Soit tous les indicateurs de conversion d�rivant une heure (donc les indicateurs d'heure, de minute et de seconde) ;
Timecalc
compl�e automatiquement les dates en entr� avec la valeur de la date ou de l'heure syst�e au moment de l'�aluation de l'expression.
Cette fontionnalit�permet de n'avoir �fournir que les ��ents utiles au calcul, tout en disposant d'une date exacte au moment du calcul.
L'ordre d'utilisation des diff�ents formats d'entr� et/ou de sortie est le suivant :
S'il existe, le format d�ini dans l'expression est utilis� Si celui-ci n'existe pas, alors, s'il existe, le format global introduit sur la ligne de commande par une option
-o
ou
-i
est utilis� Si ce dernier n'existe pas, alors le format par d�aut est utilis�
timecalc -i "%Y/%m/%d" -e 'now ; "2000/2/2" + 24 hours; "2001/1/1" + 3 mon with output format "%d%m/%y" ;'
timecalc -e '"2003/6/27 17:00:00" + ("2003/9/2 09:00:00" - "2003/6/27 17:00:00")/2;'