tiempo than semana restar obtener horas greater formato fechas convertir comparar como clase python django timezone

python - than - django 1.4: no se pueden comparar fechas de fechas sin desplazamiento y fechas de compensaciĆ³n



python date greater than (1)

Consulte el documento completo para obtener información detallada.

Normalmente, use django.utils.timezone.now para crear un datetime actual compatible con offset

>>> from django.utils import timezone >>> timezone.now() datetime.datetime(2012, 5, 18, 13, 0, 49, 803031, tzinfo=<UTC>)

Y django.utils.timezone.make_aware para hacer un datetime consciente de offset

>>> timezone.make_aware(datetime.datetime.now(), timezone.get_default_timezone()) datetime.datetime(2012, 5, 18, 21, 5, 53, 266396, tzinfo=<DstTzInfo ''Asia/Shanghai'' CST+8:00:00 STD>)

Luego puede comparar los tiempos de fecha de compensación con problemas.

Además, puede convertir la fecha de vencimiento compensada a la fecha de inicio simplificada eliminando la información de la zona horaria, luego se podría comparar con la datetime.datetime.now() / datetime.datetime.now() normal. datetime.datetime.now() , bajo utc.

>>> t = timezone.now() # offset-awared datetime >>> t.astimezone(timezone.utc).replace(tzinfo=None) datetime.datetime(2012, 5, 18, 13, 11, 30, 705324)

USE_TZ es True ''por defecto'' (en realidad es False de forma predeterminada, pero el archivo settings.py generado por django-admin.py startproject establece en True ), luego si su DB es compatible con los tiempos de la zona horaria, los valores del modelo relacionado con el tiempo los campos serían conscientes de la zona horaria. puede desactivarlo configurando USE_TZ=False (o simplemente elimine USE_TZ=True ) en la configuración.

Estoy en el proceso de migrar una aplicación de django 1.2 a 1.4.

Tengo un objeto de tarea diario que contiene una hora del día en que se debe completar la tarea:

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'']

Para verificar si todavía se requiere completar una tarea hoy, tengo el siguiente código:

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

Esto funcionó bien en 1.2, pero en 1.4 recibo el error:

can''t compare offset-naive and offset-aware datetimes

debido a la linea

if timeDue<now and timeDue>dailyTask.last_completed

y ambas cláusulas de comparación arrojan este error.

Intenté hacer timeDue timezone consciente agregando pytz.UTC como argumento, pero esto aún provoca el mismo error.

He leído algunos de los documentos en husos horarios, pero estoy confundido sobre si solo tengo que hacer que timezone sea reconocida por la zona horaria o si necesito hacer un cambio fundamental en mi base de datos y en los datos existentes.