我的代码在本地机器上正常工作:
def convert_timestamp(timestamp):
formats = ['%a, %d %b %Y %H:%M:%S %Z',
'%a, %d %b %Y %H:%M:%S %z',
'%a, %d %b %Y %H:%M:%S EST',
'%Y-%m-%dT%H:%M:%S.%fZ']
for fmt in formats:
try:
dt = datetime.strptime(timestamp, fmt)
break
except ValueError:
pass
utc_dt = dt.astimezone(pytz.UTC)
return str(utc_dt.strftime('%Y-%m-%d %H:%M:%S'))
此代码用于将我的日期格式转换为 UTC 格式。例如,此格式将按我的预期进行转换:
"Thu, 01 Nov 2018 16:50:27 EDT"
输出将是:
2018-11-01 20:50:27
但是当我在我的
vps
上运行此代码时,我收到此错误:
time data 'Thu, 01 Nov 2018 16:50:27 EDT' does not match format ...
我该怎么办?
我在代码中添加了
print()
,它显示 %Z
不解析 EDT
也不解析 EST
。%a, %d %b %Y %H:%M:%S EDT'
我用来测试它的完整代码:
from datetime import datetime
def convert_timestamp(timestamp):
print(timestamp)
formats = ['%a, %d %b %Y %H:%M:%S %Z',
'%a, %d %b %Y %H:%M:%S %z',
'%a, %d %b %Y %H:%M:%S EST',
'%Y-%m-%dT%H:%M:%S.%fZ']
for fmt in formats:
try:
dt = datetime.strptime(timestamp, fmt)
print(' OK:', fmt)
break
except ValueError:
print(' error:', fmt)
pass
utc_dt = dt.astimezone(pytz.UTC)
return str(utc_dt.strftime('%Y-%m-%d %H:%M:%S'))
# --- test ---
examples = [
"Thu, 01 Nov 2018 16:50:27 EDT",
"Thu, 01 Nov 2018 16:50:27 EST",
"Thu, 01 Nov 2018 16:50:27 UTC",
"Thu, 01 Nov 2018 16:50:27 -0400", # EDT
"Thu, 01 Nov 2018 16:50:27 -0500", # EST
]
for item in examples:
try:
convert_timestamp(item)
except:
pass
结果:
Thu, 01 Nov 2018 16:50:27 EDT
error: %a, %d %b %Y %H:%M:%S %Z
error: %a, %d %b %Y %H:%M:%S %z
error: %a, %d %b %Y %H:%M:%S EST
error: %Y-%m-%dT%H:%M:%S.%fZ
Thu, 01 Nov 2018 16:50:27 EST
error: %a, %d %b %Y %H:%M:%S %Z
error: %a, %d %b %Y %H:%M:%S %z
OK: %a, %d %b %Y %H:%M:%S EST
Thu, 01 Nov 2018 16:50:27 UTC
OK: %a, %d %b %Y %H:%M:%S %Z
Thu, 01 Nov 2018 16:50:27 -0400
error: %a, %d %b %Y %H:%M:%S %Z
OK: %a, %d %b %Y %H:%M:%S %z
Thu, 01 Nov 2018 16:50:27 -0500
error: %a, %d %b %Y %H:%M:%S %Z
OK: %a, %d %b %Y %H:%M:%S %z