Как получить дату которая не зависит от даты указанной в системе

datetime.now() выводит дату которая установлено в системе. Как можно узнать дату, которая не зависит от настроек системы?


Ответы (2 шт):

Автор решения: Павел

В основном, все Python библиотеки связанные с датой (datetime, pytz, ...) используют для своей работы ту информацию, которая выставлена в ОС, поэтому с помощью них получить данные, которые никак не связаны с настройками системы - не получится.

Но есть выход, можно сделать запрос на какой-либо ntp сервер (сервер точного времени), самый популярный - ntp.org, и дополнительно нужно обладать списком временных зон (через модуль, например), чтобы получить необходимые данные из ответа сервера.

Алгоритм следующий:

  1. Для начала, через пакетный менеджер pip устанавливаем требуемые модули, содержащие информацию о всех временных зонах, и также интерфейс ntp-клиента для работы с сервером:

$ pip install zoneinfo, tzdata, ntplib

  1. Отправляем запрос на сервер и получаем нужную информацию из ответа согласно требуемой временной зоне.

Код:

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
→ Ссылка
Автор решения: CrazyElf
from datetime import datetime

print(datetime.utcnow())

UTC ("Всемирное координированное время") - дата и время без учёта часового пояса системы (но зависящее от выставленных даны и времени в системе)

→ Ссылка