2017-04-25 1 views
0

Das Erfassen des letzten gebauten Datums von Jenkins gibt mir ein Epochendatum im Format 1493146210998, während das heutige Datum (ungefähr, zum Zeitpunkt des Schreibens) 1493146250 ist. Offensichtlich sind sie in verschiedenen Einheiten.Vergleichen von Epochendaten in verschiedenen Formaten für eine bestimmte Zeitlücke

Ich muss die zwei Daten überprüfen, und herausfinden, ob "gerade jetzt" mindestens acht Stunden später als der Jenkins Timestamp ist. Ich denke, dass ich den ersten Zeitstempel richtig umwandele, um den Einheiten der Sekunde zu entsprechen (Tauchen um 1000), aber die Mathematik, die mit dem Vergleich der beiden verbunden ist, bringt mich zum Stolpern.

Dies wird in einem Bash-Skript sein und wird etwas wie enden;

jenkinsBuild="1493146210998" 
lastBuild=(`expr $jenkinsBuild/1000`) 
currentTime=(`date +%s`) 

if("$lastBuild" is less than eight hours before "$currentTime") { 
     echo "Times are too close together." 
    } 

Wie kann ich überprüfen, ob die zwei mal weniger sind als acht Stunden auseinander? Fühlen Sie sich frei, das heutige Datum zu ersetzen, wenn dies in mehr als acht Stunden beantwortet wird.

Antwort

1

Sie können das bash Rechenzeichen $((..)) in einem if-clause als

jenkinsBuild="1493146210998" 
if (($((($(date +%s) - $(date [email protected]${jenkinsBuild:0:10} +%s))/(60*60))) < 8)); then 
    echo "Times are too close together." 
fi 

Die Idee ist es, die 10 Ziffern von dem jenkinsBuild Variable und führen Sie das GNU Datum Arithmetik erhalten den EPOCH Wert in Stunden zu bekommen und sehen, wenn es weniger als 8 ist, um die Bedingung zum Funktionieren zu bringen.


scheint OP die native Mac OS X Version von bash hat, die nicht GNU-Toolkit hat und keinen date GNU-Befehl, so tun, um die Arithmetik als

jenkinsBuild="1493146210998" 
if (($((($(date +%s) - ${jenkinsBuild:0:10})/(60*60))) < 8)); then 
    echo "Times are too close together." 
fi 
+0

nicht sicher: (1493148707 -)/(60 * 60): Syntaxfehler: Operand erwartet (Fehler tok en ist ")/(60 * 60)") ' – Alex

+0

@Alex: Es bedeutet, dass Sie nicht die Variable' jenkinsBuild' definiert haben, wie Sie in der Frage behauptet haben. Definieren Sie es und versuchen Sie es zurück – Inian

+0

Ich kopierte Ihr Skript Zeichen für den Charakter - sogar lief es mit einem "Echo", um sicherzustellen. Es muss in der If irgendwie scheitern, aber ich bin nicht vertraut genug mit Ihrem Code zu wissen, warum – Alex

0

In bash v4.4+ Sie reinen bash verwenden können, wie : wenn Tippfehler oder Benutzerfehler, aber ich bin immer `Linie 2

jenkinsBuild="1493146210998" 
diff=$(($(printf "%(%s)T") - (jenkinsBuild/1000))) 

((diff < 8*60*60)) && echo "Too close" || echo "OK" 

#or  
if ((diff < 8*60*60)); then 
     echo "Too close" 
else 
     echo OK 
fi 
Verwandte Themen