我正在开发一个与服务器交互并检索日期时间字符串的 Python 脚本。我面临的挑战是将脚本中的日期时间字符串与从服务器接收的日期时间字符串进行比较。服务器字符串包含时区偏移量,这使得直接字符串比较出现问题。
以下是该问题的示例:
2023-10-03T01:52:04
2023-10-02T21:52:04-04:00
我尝试使用以下代码解决此问题:
from datetime import datetime, timedelta
from dateutil.parser import parse
# My string output
my_string_output = "2023-10-03T01:52:04"
# Server string output
server_string_output = "2023-10-02T21:52:04-04:00"
# Extract the time zone offset from the server string output
offset = server_string_output[-6:]
# Parse the time strings with time zone offset
my_string_dt = parse(my_string_output)
server_string_dt = parse(server_string_output)
# Adjust for the time zone offset
if offset[0] == '-':
server_string_dt -= timedelta(minutes=int(offset[1:]) * 60)
else:
server_string_dt += timedelta(minutes=int(offset[1:]) * 60)
# Now, compare the adjusted date and time
assert server_string_dt == my_string_dt
但是,该断言并没有按预期工作。我想编写断言来比较这些日期时间字符串并考虑时区偏移。我怎样才能实现这个目标?
通常,当给出的日期/时间字符串没有时区偏移/名称时,会假定系统的本地时区。
datetime.datetime
对象提供了一种方便的 astimezone
方法,在不带参数调用时将 datetime
对象转换为本地时区,因此您可以标准化 datetime
对象以进行正确的比较:
assert datetime.fromisoformat(my_string_output).astimezone() == \
datetime.fromisoformat(server_string_output).astimezone()