Стандарт обозначения времени - PullRequest
2 голосов
/ 24 июля 2011

У меня есть следующий скрипт, определяющий объект tzinfo:

import time
from datetime import datetime, timedelta, tzinfo

class ManilaTime(tzinfo):
  def utcoffset(self, dt):
    return timedelta(hours=8)

  def tzname(self, dt):
    return "Manila"

manila = ManilaTime()

Теперь я скажу

t = datetime(tzinfo=manila, *time.gmtime()[:-3])
print t

, что дает мне

2011-07-24 12:52:06+08:00

Вопрос: Что означает 12:52:06+08:00? Я хочу научиться читать информацию о времени, которая включает смещение UTC, в соответствии со стандартами. Пожалуйста, не обращайте внимания, что я использовал time.gmtime(). Допустим, я получил только строку времени. Как мне это прочитать?

A. Мне нужно выполнить сложение, чтобы получить Манильское время. Прочитав это, я должен сделать расчет, и я скажу

Это 12:52:06 в Гринвиче, который я должен сместить на +08:00. Это означает, что в Маниле 20:52:06.

B. Я возьму это по номиналу и скажу

Это 12:52:06 в Маниле и смещение от UTC на +08:00. Это означает, что в Гринвиче 04:52:06.

Что правильно? A или B ?

1 Ответ

5 голосов
/ 24 июля 2011

12:52:06+08:00 в общем означает, что это заданное время в часовом поясе на 8 часов раньше UTC.Так что B будет правильным.

Однако вы неправильно сгенерировали строку времени .time.gmtime() просто возвращает время без часового пояса, и вы сказали datetime(), что время было в часовом поясе Манилы.Так что в данном конкретном случае A будет правильным.

Примечание: datetime.strptime не работает с часовыми поясами - вы можете использовать код формата %z для datetime.strftime,но не с strptime.Если вам нужно сделать это, используйте dateutil, см. Как анализировать даты с помощью строки -0400 часового пояса в python?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...