Задать вопрос
@Q4U

Разные часовые пояса в питоне, как сделать чтоб менялось не только время но и дата (день недели)?

Делаю код, который должен работать с часовым поясом.

Аргумент функции - разница во времени (в часах). Функция возвращает словарь с днём недели, часами (сколько сейчас часов учитывая разницу) и минутами.
Код выглядит как-то так:

import datetime
from datetime import datetime

def get_datetime(difference):
    bot_datetime = {
    "weekday" : datetime.now().isoweekday(),
    "hour" : datetime.now().hour + difference,
    "minute" : datetime.now().minute
    }

    if bot_datetime["hour"] >= 24:
        bot_datetime["hour"] -= 24
        bot_datetime["weekday"] += 1
        if bot_datetime["weekday"] > 7:
            bot_datetime["weekday"] = 1

    elif bot_datetime["hour"] < 0:
        bot_datetime["hour"] = 0
        bot_datetime["weekday"] -= 1
        if bot_datetime["weekday"] == 0:
            bot_datetime["weekday"] = 1

    return bot_datetime

print(get_datetime(-2))


Находил библиотеки и модули, которые считают разницу во времени, но они не меняют дату, то есть день заканчивается, а дата та же.

Хочу узнать: Код кривой? И есть ли адекватный модуль или библиотека которая делает то же самое?
  • Вопрос задан
  • 95 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillbox
    Профессия Python-разработчик + ИИ
    10 месяцев
    Далее
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Может можно и проще сделать, но если надо пояс числом, то монжо так

from datetime import datetime, timedelta, timezone
import time


# Сначала находим смещение локального времени по UTC в часах
delta = -time.timezone//3600

# Потом прибавляем к нашему локальному поясу разницу и передаем это в таймзону
offset = timedelta(hours=delta+difference)
tz = timezone(offset)

# получаем время с учетом таймзоны
now = datetime.now(tz=tz)


Соответственно, все даты, время и дни недели будут сами пересчитаны, поэтому можно удалить все блоки if
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽