关于django:在Python中比较两种不同格式的日期

Compare two dates with different formats in Python

我不熟悉Python,只是调试现有代码。我在这里比较两个日期,但格式不同。当我进行比较时,我得到了"typeerror:cannot compare offset naive and offset aware datetime"。

if date_start <= current_date:

"TypeError: can't compare offset-naive and offset-aware

str(date_start) >> 2015-08-24 16:25:00+00:00

str(current_date) >> 2015-08-24 17:58:42.092391

如何进行有效的日期比较?我假设我需要将一种格式转换为另一种格式。

更新

1
2
3
4
5
6
7
8
hour_offset = 0
minute_offset = 0
if timezone_offset:
    offset_sign = int('%s1' % timezone_offset[0])
    hour_offset = offset_sign * int(timezone_offset[1:3])
    minute_offset = offset_sign * int(timezone_offset[3:5])    
    current_date = (datetime.datetime.now() +
        datetime.timedelta(hours=hour_offset,minutes=minute_offset))

上一个开发人员可能已经以这种方式应用了时区偏移量。有什么想法吗?


使用dt.replace(tzinfo=tz)将时区添加到原始日期时间中,以便进行比较。


一种方法是将日期转换为自epoch以来的秒数,然后进行比较。例如,如果您的日期是2015-08-24 16:25:00,那么您可以使用datetime方法将其转换为秒。取参数为(year, month, day[, hour[, minute[,second[, microsecond[, tzinfo]]]]])。它返回一个日期时间对象。最后,可以使用strftime()将秒作为零填充的十进制数。所以您的代码可以是:

1
2
3
4
5
6
7
import datetime
d1 = datetime.datetime(2015,8,24,16,25,0)
d2 = datetime.datetime(2015,8,24,17,58,42,92391)
if int(d1.strftime("%s")) > int(d2.strftime("%s")):
    print"First one is bigger"
else:
    print"Second one is bigger"

希望这有帮助!


这里没有更多的细节需要解决,但是如果你想得到一个offset-naive时间,试试这个。

1
(offset-aware-datetime).replace(tzinfo=None)

要向offset-naive时间添加时区,请尝试此操作。

1
(offset-naive-datetime).replace(tzinfo=tz)