Ich muss einige Datumsberechnungen und Konvertierungen in einem Shell-Skript durchführen. Berechnen Sie beispielsweise die Tagesdifferenz zwischen einem als Nov 28 20:27:19 2012 GMT
und heute formatierten Datum .
Es gibt mehrere Möglichkeiten (GNU date
, gawk
, perl
etc.) , aber ich möchte in der Lage sein , es ohne GNU - Tools auf Systemen zu laufen (zB BSDs, Solaris, etc.)
Im Moment ist Perl die portabelste Lösung, die ich habe, aber es könnte die Installation zusätzlicher Module für die Datumskonvertierung erfordern.
Was soll ich wählen?
Bearbeiten : Als ich mir die Kommentare ansah, wurde mir klar, dass ich klarstellen muss, dass das Tool, das ich schreibe, öffentlich verbreitet wird. Ich suche nicht nach einer Möglichkeit, Berechnungen auf meinem Computer durchzuführen oder GNU-Tools zu installieren.
Ich möchte Werkzeuge verwenden, die wahrscheinlich auf den meisten Maschinen zu finden sind.
Antworten:
Ich musste dies in der Vergangenheit mit Brute-Force-Analyse und Berechnung in Shell-Skripten tun.
Die manuelle Ausführung in Shell-Skripten ist sehr fehleranfällig und langsam. Sie müssen Tage pro Monat, Schaltjahre und Zeitzonen berücksichtigen. Es wird mit verschiedenen Gebietsschemas und verschiedenen Sprachen fehlschlagen.
Ich habe eines meiner alten Skripte repariert. Dies müsste wahrscheinlich für verschiedene Shell-Umgebungen geändert werden, aber es sollte nichts geben, das nicht geändert werden kann, um in einer Shell zu funktionieren.
Ich habe wahrscheinlich irgendwo einen Fehler gemacht und es könnte einen besseren Weg geben. Lassen Sie mich wissen, wenn Sie einen Fehler oder einen besseren Weg finden.
Sobald Sie die Epochenzeit haben, können Sie einige nützliche Berechnungen durchführen ... obwohl das Umwandeln in ein Datum ohne die Gnu-Utensilien ... das Umgekehrte erfordert ...
quelle
case ....
sollte immer den Standardfall enthalten, wie zum Beispiel*) output_error ; exit 1 ;;
. Hier wird jede Zeitzone, die sich von einem Ihrer drei Fälle unterscheidet, stillschweigend ignoriert.Meine Lösung ist kurz und ich habe zuvor Versionen in C, Lua, Python, Perl, Awk, Ksh und Csh geschrieben (die folgende Version ist ksh). Einige spezifische Fragen, die Sie mit ansi_dn, nd_isna und dow beantworten können: Gegeben a Datum JJJJ MM TT, was ist das Datum 100 Tage vorher oder nachher? Was ist der Wochentag bei einem bestimmten Datum? Wie viele Tage liegen bei zwei Daten dazwischen?
quelle
Du könntest meine benutzen
dateutils
. Sie sind tragbar, aber es ist ziemlich sicher anzunehmen, dass sie nirgendwo installiert sind. Versenden Sie jedoch nur den Quellcode (einfaches altes C) oder die Binärdateien.quelle
Am logischsten wäre es für mich, die Datums- und Uhrzeitfunktionen der Shells zu verwenden? zB für Bash: http://ss64.com/bash/date.html
quelle