无法比较天真和明智的datetime.now() <= challenge.datetime_end

346
我正在尝试使用比较运算符将当前日期和时间与模型中指定的日期和时间进行比较。
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()中使用的格式。它是naive还是aware?如何让datetime.now()识别本地日期时间?

2
https://dev59.com/oWgv5IYBdhLWcg3wXPou - catherine
1
有一个非常好用的日期处理库:Pendulum(我并非参与其中)。 - Thomas Decaux
14个回答

1

如果您使用的是Python 3.6及更高版本,则可以利用本地datetime功能。

utc_date = datetime.datetime.fromtimestamp(0, datetime.timezone.utc)

你能提供一个实际日期的例子,以便查看输入应该是什么样子的吗? 在datetime方法中提供“tzinfo”似乎更清晰。 - Seb
1
当然,您可以在此处的文档中找到示例:https://docs.python.org/3/library/datetime.html#datetime.datetime.fromisoformat - Jan Richter

0

有时候我的笔记本会出现这个错误...我不知道为什么。

我的日期时间对象通常在数组中。我尝试了一些上面的答案,但我发现解决这个问题的方法是

import numpy as np
import matplotlib.dates as mdates

array_with_datetime = np.array( 
                          mdates.num2date( 
                                     mdates.date2num( 
                                                 array_with_datetime)))

不够优雅,但是它有效。如果不使用np.array,它会返回一个列表。


0
在我的情况下,我使用pytz控制了时区,并使用django.utils中的时区将日期转换为本地时间:
import pytz
from django.utils import timezone

def _my_method(native_date, timezone):
    aware_date = datetime.now(pytz.timezone(timezone))
    return timezone.make_naive(aware_date) >  native_date

同时,您可以使用make_aware函数将本地日期转换为带有时区的日期。


-2

只是:

dt = datetimeObject.strftime(format) # format = your datetime format ex) '%Y %d %m'
dt = datetime.datetime.strptime(dt,format)

那么就这样做:

start_time = challenge.datetime_start.strftime('%Y %d %m %H %M %S')
start_time = datetime.datetime.strptime(start_time,'%Y %d %m %H %M %S')

end_time = challenge.datetime_end.strftime('%Y %d %m %H %M %S')
end_time = datetime.datetime.strptime(end_time,'%Y %d %m %H %M %S')

然后使用start_timeend_time


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接