2014-07-03 18 views
20

Es sieht so aus, als ob ich es nicht schaffen werde, das Bash UTC Datum in der Sekunde zu bekommen. Ich bin in Sydney so + 10 Stunden UTC-ZeitBash bekommen UTC Zeit in Sekunde

date 
Thu Jul 3 17:28:19 WST 2014 

date -u 
Thu Jul 3 07:28:20 UTC 2014 

Aber wenn ich es zu konvertieren versucht, ich bin das gleiche Ergebnis zu erzielen, die

date +%s 
1404372514 

date -u +%s 
1404372515 

nicht UTC-Zeit ist, was ich hier fehlt?


Nachdem eine Antwort zu bekommen sagt date +%s UTC-Zeit zurückkehrt, sind hier weitere Details über das Problem, das ich jetzt mit Blick auf bin.

Ich versuche, ein Datum in einer Datei mit Python geschrieben zu vergleichen. Dieses Datum wird in Sekunden in UTC-Zeit geschrieben. Und die Bash date +%s gibt mir nicht die gleiche. Eigentlich, wenn ich in Python time.asctime(time.localtime(date_in_seconds_from_bash)) mache, bekomme ich die aktuelle Zeit von Sydney, nicht UTC. Ich verstehe nicht.

+0

Wollen Sie Zeit in Sekunden seit dem Beginn des Tages? Woche? Monat? Jahr? –

+0

Das macht überhaupt keinen Sinn? –

+0

Rückgabewert von 'Datum +% s' ist in der Tat UTC – anubhava

Antwort

10

Ich glaube +% s ist Sekunden seit der Epoche. Es ist zeitzoneninvariant.

+0

sowieso, um Datum in UTC Sekunden dann zu bekommen? –

+3

@RomanzoCriminale Nach 'date --help':'% s Sekunden seit 1970-01-01 00:00:00 UTC'. Hinzufügen von "-u" macht keinen Unterschied. Es würde immer noch basierend auf UTC drucken. Dies ist der Grund, warum Sie die gleichen Werte erhalten haben. – konsolebox

+1

Beide Ihre Antworten oben sind richtig. UTC Seconds ist überall auf der Welt gleich und eignet sich daher auch für unmissverständliche Zeitstempel. Sekunden seit 1970 Mitternacht in Sydney könnten berechnet werden, indem die Differenz zwischen dieser Zeit und der UTC-Nullzeit genommen wird (-neg 11 oder so, nehme ich an), aber diese Zahl ist wahrscheinlich nicht das, was Sie wollen. – JamesNoonan33

5

Sie sagen, Sie verwenden:

time.asctime(time.localtime(date_in_seconds_from_bash)) 

wo date_in_seconds_from_bash ist vermutlich die Ausgabe von date +%s.

Die time.localtime Funktion, wie der Name sagt, gibt Ihnen Ortszeit. Wenn Sie UTC möchten, verwenden Sie time.gmtime() statt time.localtime().

Wie JamesNoonan33's answer sagt, die Ausgabe von date +%s Zeitzone unveränderlich ist, so date +%s-date -u %s genau entspricht. Es gibt die Anzahl der Sekunden seit der "Epoche" aus, also 1970-01-01 00:00:00 UTC. Die Ausgabe, die Sie in Ihrer Frage zeigen, ist völlig konsistent mit dieser:

date -u 
Thu Jul 3 07:28:20 UTC 2014 

date +%s 
1404372514 # 14 seconds after "date -u" command 

date -u +%s 
1404372515 # 15 seconds after "date -u" command 
5

Ich wette, das ist, was als Ergebnis beabsichtigt war.

$ date -u [email protected] 
Thu Jul 3 07:28:34 UTC 2014