Формат ISO-кода Python UTC datetime не включает Z (смещение Zulu или Zero)

Почему python 2.7 не содержит Z-символ (Zulu или нулевое смещение) в конце строки isoformat объекта UTC datetime, в отличие от JavaScript?

>>> datetime.datetime.utcnow().isoformat() '2013-10-29T09:14:03.895210' 

Если в javascript

 >>> console.log(new Date().toISOString()); 2013-10-29T09:38:41.341Z 

  • Spark DataFrame TimestampType - как получить из поля данные Год, Месяц, День?
  • Временная метка JavaScript для преобразования даты и времени Python
  • Извлечь время из UUID v1 в python
  • Что именно означает T и Z в timestamp?
  • Как преобразовать дату tomorrows (в определенное время) в метку времени
  • python pandas TimeStamps для локальной временной строки с летним временем
  • Невозможно применить методы на временных отметках с помощью встроенных встроенных модулей
  • 3 Solutions collect form web for “Формат ISO-кода Python UTC datetime не включает Z (смещение Zulu или Zero)”

    У объектов Python datetime по умолчанию нет информации о часовом поясе, и без нее Python фактически нарушает спецификацию ISO 8601 ( если не указана информация о часовом поясе, которая считается локальным временем ). Вы можете использовать пакет pytz для получения определенных часовых поясов по умолчанию или непосредственно подкласса tzinfo самостоятельно:

     from datetime import datetime, tzinfo, timedelta class simple_utc(tzinfo): def tzname(self,**kwargs): return "UTC" def utcoffset(self, dt): return timedelta(0) 

    Затем вы можете вручную добавить информацию о часовом поясе в utcnow() :

     >>> datetime.utcnow().replace(tzinfo=simple_utc()).isoformat() '2014-05-16T22:51:53.015001+00:00' 

    Обратите внимание, что это соответствует стандарту ISO 8601, который позволяет использовать Z или +00:00 в качестве суффикса для UTC. Обратите внимание, что последний на самом деле лучше соответствует стандарту, так как часовые пояса представлены вообще (UTC – особый случай.)

    Опция: isoformat()

    Дата и время Python не поддерживают суффиксы военного времени, такие как суффикс «Z» для UTC. Следующая простая замена строки делает трюк:

     In [1]: import datetime In [2]: d = datetime.datetime(2014, 12, 10, 12, 0, 0) In [3]: str(d).replace('+00:00', 'Z') Out[3]: '2014-12-10 12:00:00Z' 

    str(d) по существу совпадает с d.isoformat(sep=' ')

    См .: Datetime, Стандартная библиотека Python

    Опция: strftime()

    Или вы можете использовать strftime для достижения такого же эффекта:

     In [4]: d.strftime('%Y-%m-%d %H:%M:%SZ') Out[4]: '2014-12-10 12:00:00Z' 

    Примечание. Этот параметр работает только тогда, когда вы знаете, что указанная дата указана в формате UTC.


    Дополнительно: Humanableable Timezone

    Идем дальше, вам может быть интересно отображать информацию о человеко-читаемом часовом поясе, pytz с strftime временной pytz strftime %Z :

     In [5]: import pytz In [6]: d = datetime.datetime(2014, 12, 10, 12, 0, 0, tzinfo=pytz.utc) In [7]: d Out[7]: datetime.datetime(2014, 12, 10, 12, 0, tzinfo=<UTC>) In [8]: d.strftime('%Y-%m-%d %H:%M:%S %Z') Out[8]: '2014-12-10 12:00:00 UTC' 

    Время Python немного неуклюже. Используйте arrow .

     > str(arrow.utcnow()) '2014-05-17T01:18:47.944126+00:00' 

    Arrow имеет по существу то же самое api, что и datetime, но с часовыми поясами и некоторыми дополнительными тонкостями, которые должны находиться в основной библиотеке.

    Python - лучший язык программирования в мире.