/ python

Python でdatetime.utcnow().isoformat()するとタイムゾーンが無い

ISO8601DateTimeで日付を渡すとき、pythonでハマったというか。

>>> from datetime import datetime
>>> print datetime.utcnow().isoformat()
2016-06-17T04:00:50.691886

UTCなのに末尾に Z もなければ +00:00 もつかない

StackOverflow

検証

% python
Python 2.7.11 (default, Mar 10 2016, 20:29:25)
[GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from datetime import datetime
>>> import pytz
>>> print datetime.utcnow().isoformat()
2016-06-17T04:20:26.483201
>>> print datetime.now(pytz.utc).isoformat()
2016-06-17T04:20:30.915120+00:00
>>>

結論、 utcnow() はdatetimeのtimezoneを None で持つので出力されないようです。
now() でUTCタイムゾーンを明示すると isoformat() でタイムゾーンが表示されます。

utcnow()の日本語ドキュメント