2017-02-17 4 views
1

Ich habe dieses Datumsformat:Python Zeitzone GMT Umwandlung

Sat Apr 14 21:05:23 GMT-00:00 2018 

Ich möchte datetime verwenden, um diese Daten zu speichern.

datetime.datetime.strptime(dateString, '%a %b %d %H:%M:%S %Z %Y').timetuple()

Was ist das Datum/Zeit-Format für GMT? Die document hat keine GMT.

+0

Welche Dokument beziehen Sie sich? – AlG

+0

Mögliches Duplikat von http://stackoverflow.com/questions/79797/how-do-i-convert-local-time-to-utc-in-python? – AlG

+0

hier ist der Link zu dem Dokument: https: //docs.python.org/3/library/datetime.html – user1224224

Antwort

1

Die Handhabung von Zeitzonen ist immer ein wenig verwirrend. In Ihrem Beispiel waren Sie nicht spezifisch für Ihre Bedürfnisse, da sie sich auf die Zeitzone beziehen.

Feste der Zeitzonen:

Eine Möglichkeit, zu lesen, was Sie ist geschrieben, dass die Zeitzoneninformationen in der Zeichenfolge immer GMT-00:00 ist. Wenn die Zeitzone immer gleich ist, dann ist es eine einfache Sache, eine strptime Zeichenfolge zu bauen, wie:

dt.datetime.strptime(date, '%a %b %d %H:%M:%S GMT-00:00 %Y') 

Dies keine Mühe macht die Zeitzone zu interpretieren, da sie fixiert ist. Dies wird Ihnen Zeitzone naiv datetime geben. Und da Ihr Beispiel sofort die datetime in eine timetuple konvertiert, nehme ich an, dies ist das gewünschte Ergebnis.

Zum Test:

die Zeitzone Interpretieren Offset:

Wenn Sie nicht GMT Zeitzonen in Ihrem Zeitstempel haben, und wollen die Informationen erhalten, können Sie tun:

def convert_to_datetime(datetime_string): 
    # split on spaces 
    ts = datetime_string.split() 

    # remove the timezone 
    tz = ts.pop(4) 

    # parse the timezone to minutes and seconds 
    tz_offset = int(tz[-6] + str(int(tz[-5:-3]) * 60 + int(tz[-2:]))) 

    # return a datetime that is offset 
    return dt.datetime.strptime(' '.join(ts), '%a %b %d %H:%M:%S %Y') - \ 
     dt.timedelta(minutes=tz_offset) 

Diese Funktion nimmt Ihre Zeit Zeichenfolge und verwenden Sie die UTC Offset. (z. B. -00:00). Es analysiert die Zeitzoneninformationen aus der Zeichenfolge und fügt dann die resultierenden Minuten und Sekunden zurück in die datetime, um es UTC relativ zu machen.

Zum Test:

>>> print(convert_to_datetime("Sat Apr 14 21:05:23 GMT-00:00 2018")) 
2018-04-14 21:05:23 

>>> print(convert_to_datetime("Sat Apr 14 21:05:23 PST-08:00 2018")) 
2018-04-15 05:05:23 

Zeitzone beachten:

Die obigen Codes gibt ein UTC relative Zeitzone naiven datetime. Es wenn Sie eine Zeitzone bewusst datetime benötigen, dann können Sie das tun, mit:

datetime.replace(tzinfo=pytz.UTC)) 

Zum Test:

>>> import pytz 
>>> print(convert_to_datetime("Sat Apr 14 21:05:23 GMT-00:00 2018").replace(tzinfo=pytz.UTC)) 
2018-04-14 21:05:23+00:00 
+0

In meinem Fall sieht aus wie ich immer GMT-00: 00.Vielen Dank für die Antwort. Mein Problem ist gelöst. – user1224224

Verwandte Themen