Ajouter des secondes à une date donnée en bash

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

“date” ne semble pas pouvoir append des secondes à une date donnée.

En fait, la commande de date GNU (qui est l’implémentation standard dans Ubuntu) peut append des décalages de date directement – par exemple, append 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 à append le décalage souhaité à celui 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 

Comme ça:

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

Il montre des données de style américain pour moi, mais voir date de l’homme 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