OVH Cloud OVH Cloud

Récupérer la date de la veille

27 réponses
Avatar
SDC
Bonjour,

Je cherche =E0 r=E9cup=E9rer la date de la veille sous la forme "%Y-%m-%d"
(formatage =E0 la "strftime") avec les commandes standard fournies avec
Solaris 8. Sous Linux, il y a "date -d yesterday '+%Y-%m-%d'" mais
l'option "-d" de "date" n'existe pas sous Solaris 8.

Pour l'instant j'ai :

gawk 'BEGIN { print strftime("%Y-%m-%d",
int(systime()/86400)*86400-7202) }'
# systime() =3D nombre de secondes depuis Epoch
# int(systime()/86400)*86400 =3D aujourd'hui =E0 01:00:00 ou 02:00:00
# int(systime()/86400)*86400-7202 =3D hier =E0 22:59:58 ou 23:59:58

Mais cela ne fonctionne qu'en Central European Time, et j'aimerai
quelque chose qui marche partout.

-Sylvain

10 réponses

1 2 3
Avatar
JustMe
SDC a présenté l'énoncé suivant :
Il faudrait que ça fonctionne à tout moment de la journée.


A priori ca, ca marche (a tester intensivement qd meme) :

#!/bin/sh

HL=`date +%H`
DL=`date +%d`
HG=`export TZ=GMT; date +%H`
DG=`export TZ=GMT; date +%d`

D=0
if [ $DG = `expr $DL + 1` -o $DG -lt `expr $DL - 1` ]; then D$; fi
if [ $DG = `expr $DL - 1` -o $DL -lt `expr $DG - 1` ]; then D=-24; fi
D=`expr $HG - $HL + $D + 24 | sed 's/^[^-]/+&/'`

echo Today=`date +%d/%m/%Y`
echo Yesterday=`export TZ=GMT$D; date +%d/%m/%Y`

Avatar
Vincent Lefevre
Dans l'article ,
JustMe écrit:

SDC a présenté l'énoncé suivant :
Il faudrait que ça fonctionne à tout moment de la journée.


A priori ca, ca marche (a tester intensivement qd meme) :

#!/bin/sh

HL=`date +%H`
DL=`date +%d`
HG=`export TZ=GMT; date +%H`
DG=`export TZ=GMT; date +%d`

D=0
if [ $DG = `expr $DL + 1` -o $DG -lt `expr $DL - 1` ]; then D$; fi
if [ $DG = `expr $DL - 1` -o $DL -lt `expr $DG - 1` ]; then D=-24; fi
D=`expr $HG - $HL + $D + 24 | sed 's/^[^-]/+&/'`

echo Today=`date +%d/%m/%Y`
echo Yesterday=`export TZ=GMT$D; date +%d/%m/%Y`


Ça ne fonctionne peut-être pas lorsque le changement de date se
produit au moment de l'exécution du script.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA


Avatar
JustMe
Vincent Lefevre avait prétendu :

Ça ne fonctionne peut-être pas lorsque le changement de date se
produit au moment de l'exécution du script.


Je pense que si car les TZ en GMT ne gerent pas de DST

A tester

Avatar
Stephane Chazelas
2006-03-30, 22:00(+02), JustMe:
SDC a présenté l'énoncé suivant :
Il faudrait que ça fonctionne à tout moment de la journée.


A priori ca, ca marche (a tester intensivement qd meme) :

#!/bin/sh

HL=`date +%H`
DL=`date +%d`
HG=`export TZ=GMT; date +%H`
DG=`export TZ=GMT; date +%d`

D=0
if [ $DG = `expr $DL + 1` -o $DG -lt `expr $DL - 1` ]; then D$; fi


Tu fais une comparaison lexicale (=), donc ca ne marchera pas
pour les jours avant le 10 (09, 08...). Utilise -eq.

Vaut mieux utiliser GMT0 que GMT. Ou mieux: ZZZ0.

eval "`
date '+HL=%H DL=%d'
TZ=ZZZ0 date '+HG=%H DG=%d'
`"

if [ $DG = `expr $DL - 1` -o $DL -lt `expr $DG - 1` ]; then D=-24; fi
D=`expr $HG - $HL + $D + 24 | sed 's/^[^-]/+&/'`

echo Today=`date +%d/%m/%Y`
echo Yesterday=`export TZ=GMT$D; date +%d/%m/%Y`





--
Stéphane


Avatar
Vincent Lefevre
Dans l'article ,
JustMe écrit:

Vincent Lefevre avait prétendu :

Ça ne fonctionne peut-être pas lorsque le changement de date se
produit au moment de l'exécution du script.


Je pense que si car les TZ en GMT ne gerent pas de DST


Je ne vois pas le rapport avec le DST.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA


Avatar
Arnaud Launay
Le Fri, 31 Mar 2006 14:06:04 +0000 (UTC), Vincent Lefevre écrivit:
Ça ne fonctionne peut-être pas lorsque le changement de
date se produit au moment de l'exécution du script.
Je pense que si car les TZ en GMT ne gerent pas de DST

Je ne vois pas le rapport avec le DST.



Tiens, dans les autres solutions, on peut aussi utiliser le gnu date:

~ $ date -d yesterday
Thu Mar 30 16:08:43 CEST 2006

Arnaud.
--
Perso: http://launay.org/dotclear/
Hébergement: http://www.nocworld.com/



Avatar
Vincent Lefevre
Dans l'article ,
Arnaud Launay écrit:

Tiens, dans les autres solutions, on peut aussi utiliser le gnu date:

~ $ date -d yesterday
Thu Mar 30 16:08:43 CEST 2006


Non: yesterday = -24 heures. Ça ne correspond pas forcément à la date
de la veille (une journée pouvant faire 23 heures ou 25 heures).

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA

Avatar
Arnaud Launay
Le Fri, 31 Mar 2006 14:56:20 +0000 (UTC), Vincent Lefevre écrivit:
Tiens, dans les autres solutions, on peut aussi utiliser le gnu date:
~ $ date -d yesterday
Thu Mar 30 16:08:43 CEST 2006
Non: yesterday = -24 heures. Ça ne correspond pas forcément à la date

de la veille (une journée pouvant faire 23 heures ou 25 heures).


Ok. Je corrige, alors.

~ $ TZ=GMT date -d yesterday
Thu Mar 30 15:40:41 GMT 2006

Arnaud.
--
Perso: http://launay.org/dotclear/
Hébergement: http://www.nocworld.com/


Avatar
Stephane Chazelas
On Fri, 31 Mar 2006 14:56:20 +0000 (UTC), Vincent Lefevre wrote:
Dans l'article ,
Arnaud Launay écrit:

Tiens, dans les autres solutions, on peut aussi utiliser le gnu date:

~ $ date -d yesterday
Thu Mar 30 16:08:43 CEST 2006


Non: yesterday = -24 heures. Ça ne correspond pas forcément à la date
de la veille (une journée pouvant faire 23 heures ou 25 heures).


Ca doit dependre de la version de GNU date alors.

Deja, celle a laquelle j'ai acces (sh-utils 1.16) ne marche pas
avec yesterday, car yesterday est un multiplicatif, il faut date
-d '1 yesterday' or date -d '-1 day'.

Ensuite:

~$ LD_PRELOAD=./a.out TIME62164600 /usr/gnu/bin/date
Sun Oct 29 23:30:00 GMT 2006
~$ LD_PRELOAD=./a.out TIME=$((1162164600 - 24 * 3600)) /usr/gnu/bin/date
Sun Oct 29 00:30:00 BST 2006
~$ LD_PRELOAD=./a.out TIME62164600 /usr/gnu/bin/date -d '-1 day'
Sat Oct 28 23:30:00 BST 2006
~$ LD_PRELOAD=./a.out TIME=$((1162164600 - 25 * 3600)) /usr/gnu/bin/date
Sat Oct 28 23:30:00 BST 2006

En l'occurrence, "-1 day", ca fait 25 heures.

--
Stephane


Avatar
Arnaud Launay
Le 31 Mar 2006 15:53:07 GMT, Stephane Chazelas écrivit:
Non: yesterday = -24 heures. Ça ne correspond pas forcément à la date
de la veille (une journée pouvant faire 23 heures ou 25 heures).
Ca doit dependre de la version de GNU date alors.



Probable.

Deja, celle a laquelle j'ai acces (sh-utils 1.16) ne marche pas
avec yesterday, car yesterday est un multiplicatif, il faut date
-d '1 yesterday' or date -d '-1 day'.


~ $ date --version
date (coreutils) 5.2.1

Ça marche aussi avec << date -d "1 day ago" >>

En l'occurrence, "-1 day", ca fait 25 heures.


Quelle idée aussi, d'utiliser spécifiquement des valeurs limites :)

Arnaud.
--
Perso: http://launay.org/dotclear/
Hébergement: http://www.nocworld.com/


1 2 3