【问题标题】:python negative timedelta objectpython负timedelta对象
【发布时间】:2022-01-21 00:14:59
【问题描述】:

我正在编写一个 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) 返回的时间应该是 1 小时 45 分钟。

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

【问题讨论】:

  • 我认为您应该将localize future 转换为时区,而不是使用astimezone 转换它。那将是上面代码中的future.localize(proxy_timezone)

标签: python datetime time timedelta pytz


【解决方案1】:

当 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

【讨论】:

    猜你喜欢
    • 2018-03-29
    • 2015-12-17
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    相关资源
    最近更新 更多