68 votes

Soustraire 1 heure de la date en shell UNIX script

J'ai ce qui suit dans un shell script. Comment puis-je soustraire une heure tout en conservant le formatage ?

DATE=`date "+%m/%d/%Y -%H:%M:%S"`

99voto

dogbane Points 85749

La commande suivante fonctionne sur les versions récentes de GNU date :

date -d '1 hour ago' "+%m/%d/%Y -%H:%M:%S"

1 votes

I recieve -date : option illégale -- d utilisation : date [-u] mmddHHMM[[cc]yy][.SS] date [-u] [+format] date -a [-]sss[.fff]

0 votes

@shamir cela signifie que votre version de date ne supporte pas cette option.

0 votes

J'ai trouvé - je le poste parce que peut-être vous connaissez un autre moyen de le faire sur une machine solaris ?

19voto

jm666 Points 17312
date -v-60M "+%m/%d/%Y -%H:%M:%S"

DATE=`date -v-60M "+%m/%d/%Y -%H:%M:%S"`

Si vous avez la version de bash 4.4+ vous pouvez utiliser l'impression de la date et l'arithmétique internes de bash :

printf "current date: %(%m/%d/%Y -%H:%M:%S)T\n"
printf "date - 60min: %(%m/%d/%Y -%H:%M:%S)T\n" $(( $(printf "%(%s)T") - 60 * 60 ))

Le site $(printf "%(%s)T") imprime les secondes d'époque, le $(( epoch - 60*60 )) est bash-aritmétique - soustrayant 1h en secondes. Imprimés :

current date: 04/20/2017 -18:14:31
date - 60min: 04/20/2017 -17:14:31

1 votes

Ce n'est pas portable, et repose sur BSD date caractéristiques.

0 votes

@tripleee et quelle date est "portable" ? Rappelez-vous qu'il y a des millions de machines BSD comme MacOS. Linux (Dieu merci) n'est pas le seul système d'exploitation de type Unix. De plus, la deuxième solution n'utilise pas du tout la date... donc...

1 votes

La seule option pour date spécifié dans POSIX es -u . Il n'est peut-être pas encore totalement portable, mais c'est une base raisonnable. Je ne dis pas que vous devez trouver une solution, je signale simplement un fait qui pourrait surprendre les visiteurs qui essaient d'utiliser les informations auxquelles vous répondez.

12voto

leGabian Points 81

Si vous avez besoin de soustraire avec timestamp :

timestamp=$(date +%s -d '1 hour ago');

1 votes

Ce n'est pas portable, et repose sur GNU date caractéristiques.

3voto

ray_g Points 36

Cela fonctionne sur mon Ubuntu 16.04. date : date --date="@$(($(date +%s) - 3600))" "+%m/%d/%Y -%H:%M:%S" Et le date version est date (GNU coreutils) 8.25

0 votes

Ce n'est pas portable, et repose sur GNU date caractéristiques.

2voto

PhiLho Points 23458

Convertir en timestamp (un long entier), soustraire le bon nombre de millisecondes, reformater au format dont vous avez besoin.

Difficile de donner plus de détails puisque vous ne spécifiez pas de langage de programmation...

0 votes

Ahh j'utilise le shell script, ma formule est la suivante -DATE= date "+%m/%d/%Y -%H:%M:%S" et à partir de DATE je veux soustraire 1 heure

1 votes

Êtes-vous obligé de rester dans la coquille ? Un awk ou perl script en ligne pourrait facilement soustraire une heure et produire le résultat dans le format requis.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X