我试图比较当前日期和时间与使用比较运算符在模型中指定的日期和时间:
if challenge.datetime_start <= datetime.now() <= challenge.datetime_end:
脚本错误如下:
TypeError: can't compare offset-naive and offset-aware datetimes
模型是这样的:
class Fundraising_Challenge(models.Model):
name = models.CharField(max_length=100)
datetime_start = models.DateTimeField()
datetime_end = models.DateTimeField()
我也有django使用区域日期和时间。
我还没有找到的是django使用DateTimeField()的格式。是天真还是有意识?我如何得到datetime.now()识别区域日期时间?
它在我身上起作用。
在这里,我正在获取创建datetime的表,并在datetime上添加10分钟。
之后根据当前时间,将执行过期操作。
from datetime import datetime, time, timedelta
import pytz
在数据库datetime上增加了10分钟
Table_datetime = '2019-06-13 07:49:02.832969'(示例)
# Added 10 minutes on database datetime
# table_datetime = '2019-06-13 07:49:02.832969' (example)
table_expire_datetime = table_datetime + timedelta(minutes=10 )
# Current datetime
current_datetime = datetime.now()
# replace the timezone in both time
expired_on = table_expire_datetime.replace(tzinfo=utc)
checked_on = current_datetime.replace(tzinfo=utc)
if expired_on < checked_on:
print("Time Crossed)
else:
print("Time not crossed ")
这对我很管用。
它在我身上起作用。
在这里,我正在获取创建datetime的表,并在datetime上添加10分钟。
之后根据当前时间,将执行过期操作。
from datetime import datetime, time, timedelta
import pytz
在数据库datetime上增加了10分钟
Table_datetime = '2019-06-13 07:49:02.832969'(示例)
# Added 10 minutes on database datetime
# table_datetime = '2019-06-13 07:49:02.832969' (example)
table_expire_datetime = table_datetime + timedelta(minutes=10 )
# Current datetime
current_datetime = datetime.now()
# replace the timezone in both time
expired_on = table_expire_datetime.replace(tzinfo=utc)
checked_on = current_datetime.replace(tzinfo=utc)
if expired_on < checked_on:
print("Time Crossed)
else:
print("Time not crossed ")
这对我很管用。
一行代码解决方案
if timezone_aware_var <= datetime.datetime.now(timezone_aware_var.tzinfo):
pass #some code
解释的版本
# Timezone info of your timezone aware variable
timezone = your_timezone_aware_variable.tzinfo
# Current datetime for the timezone of your variable
now_in_timezone = datetime.datetime.now(timezone)
# Now you can do a fair comparison, both datetime variables have the same time zone
if your_timezone_aware_variable <= now_in_timezone:
pass #some code
总结
您必须将时区信息添加到now() datetime中。
但是,必须添加与引用变量相同的时区;这就是为什么我首先读取tzinfo属性。