Za pomocą funkcji utcnow () modułu datetime można uzyskać bieżący czas UTC.
>>> import datetime
>>> utc_datetime = datetime.datetime.utcnow()
>>> utc_datetime.strftime("%Y-%m-%d %H:%M:%S")
'2010-02-01 06:59:19'
Jak wspomniany wyżej link przez Toma: http://lucumr.pocoo.org/2011/7/15/eppur-si-muove/ mówi:
UTC to strefa czasowa bez czasu letniego i wciąż strefa czasowa bez zmian konfiguracji w przeszłości.
Zawsze mierz i przechowuj czas w UTC .
Jeśli chcesz nagrać, gdzie został pobrany czas, przechowuj go osobno.
Nie przechowuj informacji o czasie lokalnym + strefie czasowej!
UWAGA - Jeśli któreś z twoich danych znajdują się w regionie, który korzysta z DST, skorzystaj pytz
i spójrz na odpowiedź Johna Millikina.
Jeśli chcesz uzyskać czas UTC z danego ciągu i masz szczęście, że jesteś w regionie świata, który albo nie używa DST, albo masz dane, które są przesunięte tylko w stosunku do UTC bez zastosowania DST:
-> wykorzystując czas lokalny jako podstawę wartości przesunięcia:
>>> # 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'
-> Lub, ze znanego przesunięcia, za pomocą 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'
AKTUALIZACJA:
Ponieważ Python 3.2 datetime.timezone
jest dostępny. Możesz wygenerować obiekt datetime rozpoznający strefę czasową za pomocą poniższego polecenia:
import datetime
timezone_aware_dt = datetime.datetime.now(datetime.timezone.utc)
Jeśli jesteś gotowy na konwersje w strefie czasowej, przeczytaj to:
https://medium.com/@eleroy/10-things-you-need-to-know-about-date-and-time-in-python-with-datetime-pytz-dateutil-timedelta-309bfbafb3f7