Python 2.7.10
8.1. Datums- und Uhrzeitangaben - grundlegende Datums- und Uhrzeittypen
>>> from datetime import datetime
>>> import pytz
>>>
>>> jst = pytz.timezone('Japan')
>>> jst_datetime = datetime.now().replace(tzinfo=jst)
>>> print jst_datetime
2015-11-12 16:09:18.544266+09:00
>>> jst_datetime_str = datetime.strftime(jst_datetime, '%Y-%m-%d %H:%M:%S %z')
>>> print jst_datetime_str
2015-11-12 16:09:18 +0900
>>> datetime.strftime(jst_datetime, '%Y-%m-%d %H:%M:%S %Z')
'2015-11-12 16:09:18 JST'
Mit tzinfo kann eine datetime-Zeichenfolge ausgegeben werden.
>>> print jst_datetime_str
2015-11-12 16:09:18 +0900
>>> datetime.strptime(jst_datetime_str, '%Y-%m-%d %H:%M:%S %z')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/lib/python2.7/_strptime.py", line 317, in _strptime
(bad_directive, format))
ValueError: 'z' is a bad directive in format '%Y-%m-%d %H:%M:%S %z'
>>>
Ich habe versucht, die datetime mit timsezone mithilfe der datetime-Zeichenfolge mit tzinfo abzurufen, aber es ist ein Fehler aufgetreten.
ValueError: 'z' is a bad directive in format '%Y-%m-%d %H:%M:%S %z'
Ich erhalte die Fehlermeldung, dass der '% z-Spezifizierer ein schlechtes Format hat.
Das Ergebnis verschiedener Untersuchungen http://stackoverflow.com/questions/2609259/converting-string-to-datetime-object-in-python
Es scheint, dass% z in Python2.7 nicht unterstützt wird. Es scheint mit Python3.2 zu funktionieren. Ich kann die Version nicht ändern, versuchen Sie es also mit einer anderen Methode
>>> jst_datetime_str = datetime.strftime(jst_datetime, '%Y-%m-%d %H:%M:%S %Z')
>>> print jst_datetime_str
2015-11-12 16:09:18 JST
>>> datetime.strptime(jst_datetime_str, '%Y-%m-%d %H:%M:%S %Z')
datetime.datetime(2015, 11, 12, 16, 9, 18)
Ich habe versucht,% Z zu verwenden, aber dieses Mal erhalte ich eine Datums- und Uhrzeitangabe ohne tzinfo, obwohl kein Fehler auftritt.
Auf der Suche nach anderen http://nekoya.github.io/blog/2013/06/21/python-datetime/
Diese Person konnte% Z auch nicht verwenden, so dass es den Anschein hat, als hätte sie "replace (tzinfo = pytz.utc)" verwendet, um es festzulegen. Es scheint unmöglich zu sein, mit einem Spezifizierer zu konvertieren, also habe ich versucht, es durch Drücken zu handhaben
>>> from datetime import datetime
>>> import pytz
>>>
>>> jst = pytz.timezone('Japan')
>>> jst_datetime = datetime.now().replace(tzinfo=jst)
>>> print jst_datetime
2015-11-12 16:54:19.564920+09:00
>>> jst_datetime_str = datetime.strftime(jst_datetime, '%Y-%m-%d %H:%M:%S') + ' ' + jst_datetime.tzinfo.zone
>>> print jst_datetime_str
2015-11-12 16:54:19 Japan
>>> zone = jst_datetime_str.split(' ')[-1]
>>> print zone
Japan
>>> datetime_str = ' '.join(jst_datetime_str.split(' ')[:2])
>>> print datetime_str
2015-11-12 16:54:19
>>> datetime.strptime(datetime_str, '%Y-%m-%d %H:%M:%S').replace(tzinfo=pytz.timezone(zone))
datetime.datetime(2015, 11, 12, 16, 54, 19, tzinfo=<DstTzInfo 'Japan' JST+9:00:00 STD>)
So was.
-In Python2.7 können die Bezeichner '% Z'und'% z'kann nicht in strptime verwendet werden. ・ Es kann jedoch normal mit Strftime verwendet werden. ・ Ich habe es später nicht bestätigt, aber es scheint, dass Python3.2 mit strptime verwendet werden kann. ・ Ehrlich gesagt fühlt es sich wie eine Kraft an, aber ich frage mich, ob es einen anderen guten Weg gibt.