Gibt es eine inverse Funktion für time.gmtime (), die ein UTC-Tupel zu Sekunden seit der Epoche analysiert?

Pythons zeitmodul scheint ein wenig zufällig. Zum Beispiel ist hier eine Liste von Methoden, von der docstring:

time() -- return current time in seconds since the Epoch as a float clock() -- return CPU time since process start as a float sleep() -- delay for a number of seconds given as a float gmtime() -- convert seconds since Epoch to UTC tuple localtime() -- convert seconds since Epoch to local time tuple asctime() -- convert time tuple to string ctime() -- convert time in seconds to string mktime() -- convert local time tuple to seconds since Epoch strftime() -- convert time tuple to string according to format specification strptime() -- parse string to time tuple according to format specification tzset() -- change the local timezone 

Blick auf localtime () und seine inverse mktime (), warum gibt es keine inverse für gmtime ()?

Bonus Fragen: Was würdest du die Methode nennen? Wie würden Sie es umsetzen?

4 Solutions collect form web for “Gibt es eine inverse Funktion für time.gmtime (), die ein UTC-Tupel zu Sekunden seit der Epoche analysiert?”

Es gibt eigentlich eine umgekehrte Funktion, aber aus irgendeinem bizarren Grund ist es im Kalendermodul : calendar.timegm (). Ich habe die Funktionen in dieser Antwort aufgelistet.

Ich dachte immer, dass die Zeit- und datetime-Module ein wenig inkohärent waren. Wie auch immer, hier ist die Umkehrung von mktime

 import time def mkgmtime(t): """Convert UTC tuple to seconds since Epoch""" return time.mktime(t)-time.timezone 

Ich bin nur ein Anfänger zu Python, aber hier ist mein Ansatz.

 def mkgmtime(fields): now = int(time.time()) gmt = list(time.gmtime(now)) gmt[8] = time.localtime(now).tm_isdst disp = now - time.mktime(tuple(gmt)) return disp + time.mktime(fields) 

Dort, mein vorgeschlagener Name für die Funktion auch. 🙂 Es ist wichtig, jedes Mal neu zu berechnen, falls sich der Tageslicht-Einsparungswert ändert oder ähnliches. (Die Umwandlung in Tupel ist für Jython erforderlich. CPython scheint es nicht zu verlangen.)

Das ist super ick, denn time.gmtime setzt das DST-Flag auf false, immer. Ich hasse den Code aber. Es muss ein besserer Weg sein, es zu tun. Und da sind wohl einige Eckfälle, die ich noch nicht bekommen habe.

Mktime Dokumentation ist ein bisschen irreführend hier, es gibt keine Bedeutung sagen, es ist als lokale Zeit berechnet, sondern es ist die Berechnung der Sekunden von Epoch nach dem mitgelieferten Tupel – unabhängig von Ihrem Computer Ort.

Wenn Sie eine Umwandlung von einem utc_tuple zur lokalen Zeit durchführen möchten, können Sie Folgendes tun:

 >>> time.ctime(time.time()) 'Fri Sep 13 12:40:08 2013' >>> utc_tuple = time.gmtime() >>> time.ctime(time.mktime(utc_tuple)) 'Fri Sep 13 10:40:11 2013' >>> time.ctime(time.mktime(utc_tuple) - time.timezone) 'Fri Sep 13 12:40:11 2013' 

Vielleicht wäre eine genauere Frage, wie man ein utc_tuple in ein local_tuple umwandelt . Ich würde es gm_tuple_to_local_tuple nennen (ich bevorzuge lange und beschreibende Namen):

 >>> time.localtime(time.mktime(utc_tuple) - time.timezone) time.struct_time(tm_year=2013, tm_mon=9, tm_mday=13, tm_hour=12, tm_min=40, tm_sec=11, tm_wday=4, tm_yday=256, tm_isdst=1) 

Validierung:

 >>> time.ctime(time.mktime(time.localtime(time.mktime(utc_tuple) - time.timezone))) 'Fri Sep 13 12:40:11 2013' 

Hoffe das hilft, ilia.

Python ist die beste Programmiersprache der Welt.