我尝试使用比较运算符将当前日期和时间与模型中指定的日期和时间进行比较:
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()识别区域设置日期时间?
发布于 2013-03-09 13:54:16
默认情况下,datetime
对象在Python语言中为naive
,因此您需要将这两个对象都设置为朴素的或有意识的datetime
对象。这可以使用以下命令来完成:
import datetime
import pytz
utc=pytz.UTC
challenge.datetime_start = utc.localize(challenge.datetime_start)
challenge.datetime_end = utc.localize(challenge.datetime_end)
# now both the datetime objects are aware, and you can compare them
注意:如果已经设置了tzinfo
,这将引发一个ValueError
。如果您不确定这一点,只需使用
start_time = challenge.datetime_start.replace(tzinfo=utc)
end_time = challenge.datetime_end.replace(tzinfo=utc)
顺便说一句,您可以使用时区信息格式化datetime.datetime对象中的UNIX时间戳,如下所示
d = datetime.datetime.utcfromtimestamp(int(unix_timestamp))
d_with_tz = datetime.datetime(
year=d.year,
month=d.month,
day=d.day,
hour=d.hour,
minute=d.minute,
second=d.second,
tzinfo=pytz.UTC)
发布于 2013-03-09 17:59:54
datetime.datetime.now
不支持时区。
Django附带了一个帮助器,它需要pytz
from django.utils import timezone
now = timezone.now()
您应该能够将now
与challenge.datetime_start
进行比较
发布于 2019-08-01 18:02:02
它正在从我身上发挥作用。在这里,我创建了表datetime,并在datetime上添加了10分钟。稍后,根据当前时间,执行过期操作。
from datetime import datetime, time, timedelta
import pytz
在数据库日期时间上增加了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 ")
这对我很管用。
https://stackoverflow.com/questions/15307623
复制相似问题