1 votes

Date appropriée -d "lundi prochain".

J'essaie d'écrire un script rapide qui calcule la date du prochain lundi qui n'est pas aujourd'hui. Bien que la commande date accepte cette expression, elle semble l'interpréter comme équivalente à "ce lundi". C'est-à-dire que si aujourd'hui est un lundi, elle émet la date d'aujourd'hui, sinon elle émet le lundi de la semaine prochaine.

Avez-vous une idée de la façon de faire cela avec la commande date (ou vraiment n'importe quelle commande disponible en bash) sans avoir à faire moi-même l'arithmétique de la date ?

Mise à jour : Il semble qu'il y ait quelque chose d'étrange dans mon environnement, car plusieurs personnes ont montré que la commande fonctionne comme prévu sur leurs systèmes. Voici ce que je vois :

$ date
Tue Jul 31 23:38:28 UTC 2012
$ date -d 'next tuesday'
Tue Jul 31 00:00:00 UTC 2012
$ date --version
date (GNU coreutils) 5.97

Il semblerait que j'aie une ancienne version de la date, peut-être est-ce là mon problème...

2voto

Rain Points 2308

Êtes-vous sûr qu'il n'y a pas un problème avec la façon dont vous exécutez la commande dans le script, peut-être des guillemets manquants ou quelque chose de cette nature ? Je ne peux pas reproduire votre problème.

$ date
Tue Jul 31 19:08:50 EDT 2012
$ date -d "next tuesday"
Tue Aug  7 00:00:00 EDT 2012
$ date -d "this tuesday"
Tue Jul 31 00:00:00 EDT 2012
$ date --version
date (GNU coreutils) 8.5

1voto

Michael Hampton Points 13142

La date GNU semble fonctionner correctement.

error@underground ~/Downloads $ date -d "next monday"
Mon Aug  6 00:00:00 EDT 2012
error@underground ~/Downloads $ date -d "next tuesday"
Tue Aug  7 00:00:00 EDT 2012
error@underground ~/Downloads $ date -d "next wednesday"
Wed Aug  1 00:00:00 EDT 2012
error@underground ~/Downloads $ date --version
date (GNU coreutils) 8.15

Vérifiez que la date, l'heure et le fuseau horaire de votre système sont corrects.

Vérifiez également que vous utilisez une version relativement récente de GNU coreutils. Le comportement que vous décrivez était un bug dans les anciennes versions de coreutils qui était corrigé dans la version 6.0 .

date : une commande telle que date -d '2006-04-23 21 days ago' imprimerait la mauvaise la mauvaise date dans certains fuseaux horaires. (voir le test pour un exemple)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X