关于datetime:Python:如何比较两个日期/时间?

Python: How to compare two date/time?

我有以下两个日期/时间,分别是date_time1date_time2

1
2
3
4
5
2017-04-15 00:00:00
2017-04-17 15:35:19+00:00

parsed1 = dateutil.parser.parse(date_time1)
parsed2 = dateutil.parser.parse(date_time2)

如果我收到另一个叫input_date_time的日期/时间(如2017-04-16 12:11:42+00:00),我会想做以下事情:

1
2
3
#    Would like to check if `input_date_time` is within the range
if parsed1 <= input_date_time <= parsed2:

有一个错误:TypeError: can't compare offset-naive and offset-aware datetimes

想把它分解为年、月、日、时、分和秒,然后比较每一个。

正确的方法是什么?


这是我再版的例子。我想我们应该为每一个日期对象提供时间区数据假设日期是本地时间。我想我们应该在日期之前添加时间区数据,1 Instead of clear other tzinfo(我的第一个例子)

ZZU1

如果输入在parsed1parsed2之间


在你的例子中,你需要给天真的日期对象(EDOCX1&2)一个时间区(以使它知道)或将原来的日期对象(EDOCX1&3)转换为一个天真的对象(以你为例),而日期是要比较的。然后你的伤寒就会消失

自从你的第二个日期有+00:00的时间带以来,输入的日期也有+00:00的时间带,让我们在出生的第一个日期(假设这是正确的时间带),然后把它转换成你需要的任何时间带(如果UTC是正确的话,你可以滑雪,隔间现在就要工作。)

1
2
3
4
parsed1 = dateutil.parser.parse(date_time1)
parsed2 = dateutil.parser.parse(date_time2)
# make parsed1 timezone aware (UTC)
parsed1 = parsed1.replace(tzinfo=pytz.utc)

现在你的对比应该工作。如果你想在任何日期指定另一时间段,可以使用astimezone函数。Lets change the timezone to that applicable to Sydney,Australia.这是一份时区清单https://gist.github.com/heyalexej/8BF688FD67D7199Be4A1682B3EEC7568

1
2
syd_tz = pytz.timezone('Australia/Sydney')
syd_parsed1 = parsed1.astimezone(syd_tz)

现在你可以用%z%z来检查时间区对你的每一个日期对象的应用。Will print it in the local time format as will %xand %xUsing Python3+:

1
2
print("Local time: %s" % syd_parsed1.strftime('%c'))
print("Offset-Timezone-Date-Time: %s" % syd_parsed1.strftime("%z-%Z-%x-%X))

希望时区功能能帮助我,当我第一次使用时,当我不知道%c


假设你有Python的日期Python的两个物体可以与"<","="和">signs作比较。

你不必把他们比作对比You don't need to parse them to compare them.

1
2
if date_time1 <= input_date_time <= datetime_2:
    #do work

如果你没有日期对象,那么在日期类中也有一种被称为日期的方法,这将使你能够创建日期对象,如果你发现它是有用的。