Функція utcnow () модуля дати може використовуватись для отримання поточного часу 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
доступний. Ви можете генерувати об'єкт дати, знаючи часовий пояс, за допомогою команди нижче:
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