Функция utcnow () модуля datetime может использоваться для получения текущего времени UTC.
>>> import datetime
>>> utc_datetime = datetime.datetime.utcnow()
>>> utc_datetime.strftime("%Y-%m-%d %H:%M:%S")
'2010-02-01 06:59:19'
Как упомянуто выше Томом: http://lucumr.pocoo.org/2011/7/15/eppur-si-muove/ говорит:
UTC - это часовой пояс без перехода на летнее время и, тем не менее, часовой пояс без изменений конфигурации в прошлом.
Всегда измеряйте и сохраняйте время в UTC .
Если вам нужно записать, где было занято время, сохраните его отдельно.
Не храните информацию о местном времени + часовом поясе!
ПРИМЕЧАНИЕ. - Если какие-либо ваши данные находятся в регионе, использующем DST, используйте pytz
и посмотрите ответ Джона Милликина.
Если вы хотите получить время UTC из заданной строки и вам посчастливилось оказаться в регионе мира, в котором либо не используется DST, либо у вас есть данные, которые только смещены относительно UTC без применения DST:
-> используя местное время в качестве основы для значения смещения:
>>> # Obtain the UTC Offset for the current system:
>>> UTC_OFFSET_TIMEDELTA = datetime.datetime.utcnow() - datetime.datetime.now()
>>> local_datetime = datetime.datetime.strptime("2008-09-17 14:04:00", "%Y-%m-%d %H:%M:%S")
>>> result_utc_datetime = local_datetime + UTC_OFFSET_TIMEDELTA
>>> result_utc_datetime.strftime("%Y-%m-%d %H:%M:%S")
'2008-09-17 04:04:00'
-> Или из известного смещения, используя datetime.timedelta ():
>>> UTC_OFFSET = 10
>>> result_utc_datetime = local_datetime - datetime.timedelta(hours=UTC_OFFSET)
>>> result_utc_datetime.strftime("%Y-%m-%d %H:%M:%S")
'2008-09-17 04:04:00'
ОБНОВИТЬ:
Начиная с Python 3.2 datetime.timezone
доступен. Вы можете создать объект datetime с учетом часового пояса с помощью команды ниже:
import datetime
timezone_aware_dt = datetime.datetime.now(datetime.timezone.utc)
Если вы готовы перейти на часовой пояс, прочитайте это:
https://medium.com/@eleroy/10-things-you-need-to-know-about-date-and-time-in-python-with-datetime-pytz-dateutil-timedelta-309bfbafb3f7