如何解决Python中的日期时间比较问题

问题描述

我的目标是将现在的日期时间与从json给我的程序提供的另一个日期时间进行比较。 比较两个日期时间后,结果与实际情况有所不同。

时区为tz = pytz.timezone('Europe/athens'),即UTC + 3

json时间最初是字符串格式,处理后我将其转换为datetime

"start_time": "2020-08-11T20:13:00+03:00",json数据

start_time = data.get('start_time')

start_datetime = dateutil.parser.parse(start_time),#datetime format

现在,在调用一个函数以检查哪个日期时间大于另一个之后,

现在日期为的信息:

2020-08-11 14:51:21.713511+03:00 

开始日期是:

2020-08-11 13:00:00+03:00

函数返回True,这是错误的,因为start_datetime不大于现在的日期时间。

功能如下:

def check_start_datetime_bigger_than_Now(start_datetime):
    tz = pytz.timezone('Europe/athens')
    dts = start_datetime.replace(tzinfo=tz)
    dtNow = datetime.Now(pytz.timezone('Europe/athens'))

    print(dts)
    print(dtNow)



    #compare the datetimes
    if dts >= dtNow:
        return True
    else:
        return False

任何人都可以帮助我澄清正在发生的事情吗?

在比较日期时间之前给出:

2020-08-11 20:13:00+01:35
2020-08-11 15:06:55.397784+03:00

为什么开始日期是+01:35

解决方法

您不应使用datetime.replace来更改datetime实例的时区。它不是很聪明,除了简单的时区(如UTC)之外,无法处理其他任何事情。使用datetime.astimezone将现有的感知datetime转换为另一个时区,或使用tz.localize将时区添加到简单的datetime实例。

但是,实际上,如果start_datetime已经有一个时区,则无需更改其时区即可与dtnow相提并论。来自两个不同时区的日期时间仍然可以比较。天真日期时间和已知日期时间的混合是不可比的。