web-dev-qa-db-fra.com

Ajouter des secondes à une date donnée en bash

J'ai une date complète plus les heures et les minutes. Je voudrais ajouter un nombre de secondes et afficher le résultat comme une date "jour.mois.année heure: minute".

"date" ne semble pas pouvoir ajouter des secondes à une date donnée.

7
Markus

En fait, la commande GNU date (qui est l'implémentation standard dans Ubuntu) peut ajouter des décalages de date directement - par exemple, ajouter 3662 secondes (1 heure, 1 minute, 2 secondes) à une date donnée.

$ date '+%d.%b.%Y %T' --date="2012-06-13 09:16:16 EDT + 3662 seconds"
13.Jun.2012 10:17:18

Cependant, il faut faire attention aux fuseaux horaires et à l'heure avancée - une option plus sûre consiste probablement à convertir l'heure d'origine en secondes depuis le début de l'époque et à ajouter le décalage souhaité à celui-ci avant de reconvertir le format souhaité, par exemple.

$ secs=$(date +%s --date="2012-06-13 09:16:16")
$ date '+%d.%b.%Y %T' --date="@$((secs + 3662))"
13.Jun.2012 10:17:18
13
steeldriver

Comme ça:

$ date +%x.%H:%M:%S:%N
01/21/2014_16:02:07:422856522

Il montre pour moi une donnée stylée mais voyez date du jour pour plus de raffinement. Les 2 options intéressantes:

%N     nanoseconds (000000000..999999999)
%S     second (00..60)

Et si vous souhaitez utiliser le format standard année, mois et jour:

$ date +%Y.%m.%d_%H:%M:%S:%N
2014.07.21_16:07:52:641771706
2
Rinzwind

Vous pouvez également incrémenter facilement la date du jour avec:

date --date="+1 seconds" '+%Y-%m-%d %T'

man date indique que ceci est documenté dans info date, mais je n'ai pas le goût de lire les manuels de info pour le citer :-)

Testé dans Ubuntu 18.04, date from Coreutils 8.28.