Python 2.7.10
8.1. Datetime - types de date et d'heure de base
>>> 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'
Il est possible de sortir une chaîne de caractères datetime avec tzinfo.
>>> 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'
>>>
J'ai essayé d'obtenir le datetime avec timsezone en utilisant la chaîne datetime avec tzinfo, mais j'ai eu une erreur.
ValueError: 'z' is a bad directive in format '%Y-%m-%d %H:%M:%S %z'
J'obtiens une erreur indiquant que le spécificateur '% z's est dans un mauvais format.
Le résultat de diverses enquêtes http://stackoverflow.com/questions/2609259/converting-string-to-datetime-object-in-python
Il semble que% z n'est pas pris en charge dans python2.7. Cela semble fonctionner avec python3.2. Je ne peux pas changer la version, alors essayez une autre méthode
>>> 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)
J'ai essayé d'utiliser% Z, mais cette fois, j'obtiens un datetime sans tzinfo, bien qu'aucune erreur ne se produise.
Recherche d'autres http://nekoya.github.io/blog/2013/06/21/python-datetime/
Cette personne ne pouvait pas non plus utiliser% Z, donc il semble qu'il a utilisé "replace (tzinfo = pytz.utc)" pour le définir. Il semble impossible de convertir à l'aide d'un spécificateur, j'ai donc essayé de le gérer en poussant
>>> 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>)
Comme ça.
-Dans python2.7, les spécificateurs '% Z' et '% z' ne peuvent pas être utilisés dans strptime. ・ Cependant, il peut être utilisé normalement avec strftime. ・ Je ne l'ai pas confirmé plus tard, mais il semble que python3.2 puisse être utilisé avec strptime. ・ Honnêtement, cela ressemble à une force, mais je me demande s'il existe un autre bon moyen.
Recommended Posts