2016-12-21 2 views
0

Ich habe eine Liste der Epoche Zeitstempel wie folgt aus:Bash: Aufrunden Unix-Zeit auf die nächste Minute in lesbarer Form

1481842799,1481842859, .....

Bisher habe ich es geschafft verwenden Sie den Befehl date diese Zeit in für Menschen lesbaren Format zu konvertieren wie folgt:

date '+%Y%m%d%H%M%S' -d @1481842799 
20161215235959 

date '+%Y%m%d%H%M%S' -d @1481842859 
20161216000059 

oder

date '+%Y%m%d%H%M%S' --date='@1481842799' 
20161215235959 

Wie kann ich das Datum Befehl zu dem Zeitpunkt auf die nächste Minute aufrunden wie folgt ?:

20161215235959-20161216000000, 20161216000059-20161216000100

folgendes versucht, funktioniert aber nicht:

date '+%Y%m%d%H%M%S' --date='@1481842799 + 1 seconds' 
date: invalid date `@1481842799 + 1 seconds' 
+0

Wissen Sie, dass alle Zeitstempel Zeiten mit 59 Sekunden entsprechen, so dass das Runden so einfach ist wie das Hinzufügen einer Sekunde? (Ausnahme: müssen Sie Schaltsekunden berücksichtigen?) Oder könnte das zweite Feld einen beliebigen Wert haben und Sie müssen tatsächlich auf die nächste Minute aufrunden? –

+0

Ich habe versucht, 1 Sekunde hinzuzufügen, aber wie Sie sehen können, konnte ich es mit dem Datum-Befehl nicht tun. – Danjel

+0

Wäre nett zu wissen, wie man sich zusammenrollt, wenn ich eine beliebige Sekunde habe. Nicht sicher, ob der Datumsbefehl diese Funktionalität unterstützt. – Danjel

Antwort

1

Sie verwenden GNU date, ganz offensichtlich aus der Flagge -d. Wenn Ihre Absicht einer Sekunde auf die EPOCH Zeit zu erhöhen, ist, tun Sie es, wie unten die bash arithmetische Operator $(())

date '+%Y%m%d%H%M%S' -d "@$((1481842799 + 1))" 
20161216043000 

Auch ohne Erhöhen können Sie die doppelten Anführungszeichen als

date '+%Y%m%d%H%M%S' -d "@$((1481842799))" 
20161216042959 

verwenden, die ist so ähnlich wie

date '+%Y%m%d%H%M%S' -d @1481842799 
20161216042959 

Als alternativer Vorschlag, um auf die nächste Minute zu runden, sind Sie besser aus Hinzufügen von 59 und dann Division und Multiplikation mit 60, um diese down auf die nächste Minute, etwa wie chepner 's Vorschlag in den Kommentaren zu kürzen.

Das Hinzufügen von 59 statt 60 bedeutet, dass der ursprüngliche Wert, wenn er bereits ein Vielfaches von 60 ist, nicht aufgerundet wird.