【发布时间】:2012-05-26 00:56:25
【问题描述】:
我正在将应用程序从 django 1.2 迁移到 1.4。
我有一个每日任务对象,其中包含应该完成该任务的时间:
class DailyTask(models.Model):
time = models.TimeField()
last_completed = models.DateTimeField()
name = models.CharField(max_length=100)
description = models.CharField(max_length=1000)
weekends = models.BooleanField()
def __unicode__(self):
return '%s' % (self.name)
class Meta:
db_table = u'dailytask'
ordering = ['name']
为了检查今天是否还需要完成任务,我有以下代码:
def getDueDailyTasks():
dueDailyTasks=[]
now = datetime.datetime.now()
try:
dailyTasks = DailyTask.objects.all()
except dailyTask.DoesNotExist:
return None
for dailyTask in dailyTasks:
timeDue = datetime.datetime(now.year,now.month,now.day,dailyTask.time.hour,dailyTask.time.minute,dailyTask.time.second)
if timeDue<now and timeDue>dailyTask.last_completed:
if dailyTask.weekends==False and now.weekday()>4:
pass
else:
dueDailyTasks.append({'id':dailyTask.id,
'due':timeDue,
'name': dailyTask.name,
'description':dailyTask.description})
return dueDailyTasks
这在 1.2 下运行良好,但在 1.4 下我得到了错误:
can't compare offset-naive and offset-aware datetimes
由于线路
if timeDue<now and timeDue>dailyTask.last_completed
两个比较子句都会抛出这个错误。
我尝试通过添加 pytz.UTC 作为参数来识别 timeDue 时区,但这仍然会引发相同的错误。
我已经阅读了一些关于时区的文档,但对于我是否只需要让 timeDue 时区感知,或者我是否需要对我的数据库和现有数据进行根本性更改感到困惑。
【问题讨论】: