python 负时间增量对象

python negative timedelta object

我正在编写一个 python 程序,它在 23:00 和 8:00 之间不需要执行任何操作,具体取决于它使用的代理的时区。

proxy_zone = get_timezone()
proxy_timezone = pytz.timezone(proxy_zone)

proxy_time = datetime.now(proxy_timezone)
now_time = proxy_time.time()

if now_time >= datetime_time(23, 00) or now_time <= datetime_time(8, 00):

    future = datetime(proxy_time.year, proxy_time.month, proxy_time.day, 8, 0)
    if proxy_time.hour >= 8:
        future += timedelta(days=1)

    bed_time = (future.astimezone(proxy_timezone) - proxy_time)
    sleep(bed_time.total_seconds())

proxy_time 是 6:45 所以 timedelta (future.astimezone(proxy_timezone) - proxy_time) returns 应该是 1 小时 45 分钟。

但是我得到的时间增量是 -1 天零 4 个半小时。

正如 MrFuppes 回答的那样,本地化未来将时间转换为正确的时区而不是本地化是导致问题的原因。

proxy_time = datetime.now(proxy_timezone)
now_time = proxy_time.time()

if now_time >= datetime_time(23, 00) or now_time <= datetime_time(8, 00):  # Sleep until 8:00

    future = datetime(proxy_time.year, proxy_time.month, proxy_time.day, 8, 0)
    if proxy_time.hour >= 8:
        future += timedelta(days=1)
        
    future = proxy_timezone.localize(future)
    bed_time = (future - proxy_time).total_seconds()

    event.nap(f'Sleeping for {bed_time} seconds')
    sleep(bed_time)  # sleep until morning