如何比较 python 中的日期时间对象?
How to compare datetime objects in python?
好吧,在 Python 中从来没有像日期时间这样困难的事情。我有一个时间,my_time
这个时间总是需要在夏季增加 2 小时,在冬季增加 1 小时。 my_time
的正确时区是 EET。现在我试图将它与 start_time
和 end_time
进行比较,但我可以看到它在执行 if 语句时仍在寻找 'base' my_time
。这怎么可能?
这是我的代码:
my_time = '20200907-07u00m00s'
my_time = datetime.datetime.strptime(my_time, '%Y%m%d-%Hu%Mm%Ss')
timezone= 'Europe/Amsterdam'
my_time = pytz.utc.localize(my_time).astimezone(pytz.timezone(timezone))
start_time = '202097060000'
start_time = datetime.datetime.strptime(start_time, '%Y%m%d%H%M%S')
start_time = pytz.utc.localize(start_time)
end_time = '202097080000'
end_time = datetime.datetime.strptime(end_time, '%Y%m%d%H%M%S')
end_time = pytz.utc.localize(end_time)
if my_time >= start_time and my_time <= end_time:
print('my_time IS between the start and end time')
else:
print('my_time IS NOT between the start and end time')
收到的输出:
my_time IS between the start and end time
我猜代码正在检查 2020-09-07 07:00:00
是否在 2020-09-07 06:00:00
和 2020-09-07 08:00:00
之间......
我的预期输出是代码检查是否:
2020-09-07 09:00:00
在 2020-09-07 06:00:00
和 2020-09-07 08:00:00
之间,这意味着它应该打印 my_time IS NOT between the start and end time
您可以获得本地化 my_time
值的 UTC-offset 并将其添加到 my_time
:
my_time = '20200907-07u00m00s'
my_time = datetime.datetime.strptime(my_time, '%Y%m%d-%Hu%Mm%Ss')
timezone= 'Europe/Amsterdam'
my_time_tz = pytz.utc.localize(my_time).astimezone(pytz.timezone(timezone))
timeDiff = my_time_tz.utcoffset().total_seconds()
print("UTC Offset: %s seconds" % timeDiff)
normalized_my_time = pytz.utc.localize(my_time+datetime.timedelta(seconds=timeDiff))
start_time = '202097060000'
start_time = datetime.datetime.strptime(start_time, '%Y%m%d%H%M%S')
start_time = pytz.utc.localize(start_time)
end_time = '202097080000'
end_time = datetime.datetime.strptime(end_time, '%Y%m%d%H%M%S')
end_time = pytz.utc.localize(end_time)
print(start_time , normalized_my_time , end_time)
if start_time <= normalized_my_time <= end_time:
print('my_time IS between the start and end time')
else:
print('my_time IS NOT between the start and end time')
输出:
UTC Offset: 7200.0 seconds
2020-09-07 06:00:00+00:00 2020-09-07 09:00:00+00:00 2020-09-07 08:00:00+00:00
my_time IS NOT between the start and end time
好吧,在 Python 中从来没有像日期时间这样困难的事情。我有一个时间,my_time
这个时间总是需要在夏季增加 2 小时,在冬季增加 1 小时。 my_time
的正确时区是 EET。现在我试图将它与 start_time
和 end_time
进行比较,但我可以看到它在执行 if 语句时仍在寻找 'base' my_time
。这怎么可能?
这是我的代码:
my_time = '20200907-07u00m00s'
my_time = datetime.datetime.strptime(my_time, '%Y%m%d-%Hu%Mm%Ss')
timezone= 'Europe/Amsterdam'
my_time = pytz.utc.localize(my_time).astimezone(pytz.timezone(timezone))
start_time = '202097060000'
start_time = datetime.datetime.strptime(start_time, '%Y%m%d%H%M%S')
start_time = pytz.utc.localize(start_time)
end_time = '202097080000'
end_time = datetime.datetime.strptime(end_time, '%Y%m%d%H%M%S')
end_time = pytz.utc.localize(end_time)
if my_time >= start_time and my_time <= end_time:
print('my_time IS between the start and end time')
else:
print('my_time IS NOT between the start and end time')
收到的输出:
my_time IS between the start and end time
我猜代码正在检查 2020-09-07 07:00:00
是否在 2020-09-07 06:00:00
和 2020-09-07 08:00:00
之间......
我的预期输出是代码检查是否:
2020-09-07 09:00:00
在 2020-09-07 06:00:00
和 2020-09-07 08:00:00
之间,这意味着它应该打印 my_time IS NOT between the start and end time
您可以获得本地化 my_time
值的 UTC-offset 并将其添加到 my_time
:
my_time = '20200907-07u00m00s'
my_time = datetime.datetime.strptime(my_time, '%Y%m%d-%Hu%Mm%Ss')
timezone= 'Europe/Amsterdam'
my_time_tz = pytz.utc.localize(my_time).astimezone(pytz.timezone(timezone))
timeDiff = my_time_tz.utcoffset().total_seconds()
print("UTC Offset: %s seconds" % timeDiff)
normalized_my_time = pytz.utc.localize(my_time+datetime.timedelta(seconds=timeDiff))
start_time = '202097060000'
start_time = datetime.datetime.strptime(start_time, '%Y%m%d%H%M%S')
start_time = pytz.utc.localize(start_time)
end_time = '202097080000'
end_time = datetime.datetime.strptime(end_time, '%Y%m%d%H%M%S')
end_time = pytz.utc.localize(end_time)
print(start_time , normalized_my_time , end_time)
if start_time <= normalized_my_time <= end_time:
print('my_time IS between the start and end time')
else:
print('my_time IS NOT between the start and end time')
输出:
UTC Offset: 7200.0 seconds
2020-09-07 06:00:00+00:00 2020-09-07 09:00:00+00:00 2020-09-07 08:00:00+00:00
my_time IS NOT between the start and end time