soustraire 1 heure de la date dans le script shell unix

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

DATE=`date "+%m/%d/%Y -%H:%M:%S"`
26
demandé sur Karl Bielefeldt 2011-05-09 12:26:36

6 réponses

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

date -d '1 hour ago' "+%m/%d/%Y -%H:%M:%S"
40
répondu dogbane 2011-05-09 08:35:54
date -v-60M "+%m/%d/%Y -%H:%M:%S"

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

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

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 ))

$(printf "%(%s)T") imprime les secondes d'époque, les $(( epoch - 60*60 )) bash-aritmetics - soustraction de 1 heure en secondes. Imprime:

current date: 04/20/2017 -18:14:31
date - 60min: 04/20/2017 -17:14:31
7
répondu jm666 2017-04-20 16:18:20

si vous avez besoin de soustraire avec horodatage :

timestamp=$(date +%s -d '1 hour ago');
4
répondu leGabian 2015-12-04 15:15:07

Convertissez en timestamp (un entier long), soustrayez le bon nombre de millisecondes, reformatez au format dont vous avez besoin.

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

2
répondu PhiLho 2011-05-09 08:29:40

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

1
répondu ray_g 2017-03-21 12:14:37

Si vous avez besoin de changer de fuseau horaire avant la soustraction avec le nouveau format de trop:

$(TZ=US/Eastern date -d '1 hour ago' '+%Y-%m-%d %H:%M')
0
répondu Kenan Duman 2018-05-24 10:37:23