问题描述
我的目标是将现在的日期时间与从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
相提并论。来自两个不同时区的日期时间仍然可以比较。天真日期时间和已知日期时间的混合是不可比的。