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"`
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"
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
si vous avez besoin de soustraire avec horodatage :
timestamp=$(date +%s -d '1 hour ago');
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...
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
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')