猿问

TypeError:无法比较原始偏移量和偏移量感知时间

我有这个功能来检查一周中的特定时间和日期。它应该从周日晚上 7:00 到周五晚上 8:00 打印 1 并从周五晚上 8:00 到周日晚上 7:00 打印 0


我在周五上午 11:00 和下午 2:00 左右检查了函数,我在标题中收到了错误消息。


有人可以准确解释错误的含义吗?我怎么可能解决它?它应该总是检查东部标准时间的时间


import pytz

from datetime import datetime, time, date


est = pytz.timezone('EST')


Mon = 0

Tue = 1

Wed = 2

Thur = 3

Fri = 4 

Sat = 5 

Sun = 6


weekdays = [Mon, Tue, Wed, Thur]

edgecases = [Sun, Fri]

weekend = [Sat]


curr_day = datetime.now(tz=est).date().weekday()

curr_time = datetime.now(tz=est).time()


def checktime(curr_day, curr_time):

    if curr_day in weekdays or (curr_day == Sun and curr_time > time(19,00,tzinfo=est)) or (curr_day == Fri and curr_time < time(20,00,tzinfo=est)):

        print(1)


    elif curr_day in weekend or (curr_day == Fri and curr_time >= time(20,00,tzinfo=est)) or (curr_day == Sun and curr_time <= time(19,00,tzinfo=est)):

        print(0)

回溯错误:


Traceback (most recent call last):

  File ".\testingtime.py", line 73, in <module>

    checktime(curr_day, curr_time)

  File ".\testingtime.py", line 67, in checktime

    if curr_day in weekdays or (curr_day == Sun and curr_time > time(19,00,tzinfo=est)) or (curr_day == Fri and curr_time < time(20,00,tzinfo=est)):

TypeError: can't compare offset-naive and offset-aware times


慕侠2389804
浏览 117回答 2
2回答

DIEA

其一,如果您time()在可识别 tz 的日期时间对象上调用该方法,则生成的time对象将不再携带时区信息 - 因为假设没有日期就没有意义。其次,由于您与静态时间相比,您在那里不需要时区。因此,您可以将您的功能简化为def checktime(curr_day, curr_time):&nbsp; &nbsp; if curr_day in weekdays or (curr_day == Sun and curr_time > time(19,00)) or (curr_day == Fri and curr_time < time(20,00)):&nbsp; &nbsp; &nbsp; &nbsp; print(1)&nbsp; &nbsp; elif curr_day in weekend or (curr_day == Fri and curr_time >= time(20,00)) or (curr_day == Sun and curr_time <= time(19,00)):&nbsp; &nbsp; &nbsp; &nbsp; print(0)

忽然笑

这为我排序了:dt_obj&nbsp;=&nbsp;dt_obj.replace(tzinfo=None)请参见python – 无法减去原始偏移和偏移感知日期时间 ... 答案 1
随时随地看视频慕课网APP

相关分类

Python
我要回答