无法比较naive和aware datetime。now()<=challenge.datetime\u结束

我试图使用比较运算符将当前日期和时间与模型中指定的日期和时间进行比较:

如果challenge.datetime\u start<=datetime.now()<=challenge.datetime\u结束:

脚本错误为:

类型错误:无法比较初始偏移量和感知偏移量的日期时间

模型如下所示:

班级筹款挑战(models.Model):
name=models.CharField(最大长度=100)
datetime\u start=models.DateTimeField()
datetime_end=models.DateTimeField()

我还让django使用区域设置日期和时间

我没有找到django用于DateTimeField()的格式。它是天真的还是有意识的?如何获取datetime.now()来识别区域设置datetime

默认情况下,Python中的datetime对象是naive,因此需要将它们都设置为naive或awaredatetime对象。这可以通过以下方式实现:

导入日期时间
进口皮茨
utc=pytz.utc
challenge.datetime\u start=utc.localize(challenge.datetime\u start)
challenge.datetime\u end=utc.localize(challenge.datetime\u end)
#现在两个datetime对象都知道了,您可以对它们进行比较

注意:如果已设置了tzinfo,则会引发ValueError。如果您对此不确定,请使用

start\u time=challenge.datetime\u start.replace(tzinfo=utc)
结束时间=挑战.日期时间\u结束.替换(tzinfo=utc)

顺便说一句,您可以使用时区信息在datetime.datetime对象中格式化UNIX时间戳,如下所示

d=datetime.datetime.utcfromtimestamp(int(unix\u时间戳))
d_with_tz=datetime.datetime(
年=d.year,
月=d.month,
天=天,
小时=d.hour,
分钟,
秒=d.second,
tzinfo=pytz.UTC)

发表评论