Как узнать разницу в местном времени и времени по Гринвичу? - PullRequest
0 голосов
/ 27 апреля 2011

Я получаю дату на сервере, и мне нужно получить разницу этой даты от GMT

Я получаю

Datetime = "2011-04-27 2:17:45"

Я бы хотел получить результат как

Datetime = "2011-04-27 2:17:45 +0500"

Ответы [ 6 ]

2 голосов
/ 27 апреля 2011

Попробуйте это:

import datetime, pytz
now = datetime.datetime.now(pytz.timezone('Asia/Kolkata'))

print now.strftime('%Y-%m-%d %H:%M:%S %z')

# prints: '2011-04-27 13:56:09 +0530'
0 голосов
/ 01 сентября 2011

Для тех, кому просто необходимо получить смещение между местным временем и UTC, модуль time имеет атрибут time.altzone, который определяет разницу между UTC и местным временемв секундах:

Смещение местного часового пояса DST в секундах к западу от UTC, если оно определено.Это отрицательно, если местный часовой пояс DST расположен к востоку от UTC (как в Западной Европе, включая Великобританию).Используйте это, только если дневной свет ненулевой.

Вот пример того, как это работает:

>>> datetime.now().isoformat()
'2011-09-01T17:26:46.971000'
>>> datetime.utcnow().isoformat()
'2011-09-01T15:27:32.699000'
>>> time.altzone / (60*60)
-2

Не намного чище, чем это.

0 голосов
/ 27 апреля 2011

Очень мощным расширением стандартной библиотеки Python datetime является dateutil , которое позволяет легко:

  • установите дельту вашего часового пояса:
  • разбирать даты с различными удобными опциями (в нашем случае мы будем использовать опцию default, которая позволит нам установить наш часовой пояс)

Итак, 1-й часовой пояс и дата по умолчанию для этого пояса:

>>> from datetime import datetime 
>>> from dateutil import parser
>>> from dateutil.tz import tzoffset
>>> tz_plus_5 = tzoffset(None, 5 * 60 * 60) # offset is in seconds !
>>> default = datetime.now(tz_plus_5)

Теперь используйте эту дату по умолчанию при разборе:

>>> Datetime = "2011-04-27 2:17:45"
>>> my_date = parser.parse(Datetime, default=default)
>>> my_date
datetime.datetime(2011, 4, 27, 2, 17, 45, tzinfo=tzoffset(None, 18000))
>>> my_date.strftime("%Y-%m-%d %H:%M:%S %z")
'2011-04-27 02:17:45 +0500'
0 голосов
/ 27 апреля 2011

Я думаю, вам нужен модуль datetime:

>>> from datetime import datetime
>>> datetime.now()
datetime.datetime(2011, 4, 27, 11, 8, 26, 149000)
>>> datetime.utcnow()
datetime.datetime(2011, 4, 27, 8, 8, 47, 712000)

Для разницы между двумя датами:

>>> dtnow = datetime.now()
>>> dtutc = datetime.utcnow()
>>> dtnow - dtutc
datetime.timedelta(0, 10792, 847000)

Найдите модуль datetime и соответствующие классы в документации Python.

0 голосов
/ 27 апреля 2011

Для этого вам необходимо знать часовой пояс (или смещение UTC) серверной даты.Здесь у вас есть «наивная» дата, без информации о часовом поясе, вы не сможете угадать разницу в UTC.

0 голосов
/ 27 апреля 2011

Из приведенного вами примера мне кажется, что вы ищете datetime.isoformat . В примере на странице показано, как преобразовать значения даты и времени в формат ISO с информацией о часовом поясе.

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