Как получить дату которая не зависит от даты указанной в системе
datetime.now() выводит дату которая установлено в системе. Как можно узнать дату, которая не зависит от настроек системы?
Ответы (2 шт):
В основном, все Python библиотеки связанные с датой (datetime, pytz, ...) используют для своей работы ту информацию, которая выставлена в ОС, поэтому с помощью них получить данные, которые никак не связаны с настройками системы - не получится.
Но есть выход, можно сделать запрос на какой-либо ntp сервер (сервер точного времени), самый популярный - ntp.org, и дополнительно нужно обладать списком временных зон (через модуль, например), чтобы получить необходимые данные из ответа сервера.
Алгоритм следующий:
- Для начала, через пакетный менеджер
pipустанавливаем требуемые модули, содержащие информацию о всех временных зонах, и также интерфейсntp-клиента для работы с сервером:
$ pip install zoneinfo, tzdata, ntplib
- Отправляем запрос на сервер и получаем нужную информацию из ответа согласно требуемой временной зоне.
Код:
import datetime
import ntplib
import zoneinfo
tz_info = zoneinfo.ZoneInfo("Europe/Moscow")
ntp_server = 'pool.ntp.org'
client = ntplib.NTPClient()
response = client.request(ntp_server)
dt = datetime.datetime.fromtimestamp(response.tx_time, tz=tz_info)
print(dt)
Вывод:
2023-01-08 11:51:11.134537+03:00
from datetime import datetime
print(datetime.utcnow())
UTC ("Всемирное координированное время") - дата и время без учёта часового пояса системы (но зависящее от выставленных даны и времени в системе)