无法将EST/EDT时区转换为其他格式



通过Python,我试图将未来的日期转换为另一种格式,并与当前日期相减,但它抛出了错误。

Python版本=Python 3.6.8

from datetime import datetime
enddate = 'Thu Jun 02 08:00:00 EDT 2022'
todays = datetime.today()
print ('Tpday =',todays)
Modified_date1 = datetime.strptime(enddate, ' %a %b %d %H:%M:%S %Z %Y')
subtract_days= Modified_date1 - todays
print (subtract_days.days)

输出

Today = 2022-02-02 08:06:53.687342
Traceback (most recent call last):
File "1.py", line 106, in trusstore_output
Modified_date1 = datetime.strptime(enddate1, ' %a %b %d %H:%M:%S %Z %Y')
File "/usr/lib64/python3.6/_strptime.py", line 565, in _strptime_datetime
tt, fraction = _strptime(data_string, format)
File "/usr/lib64/python3.6/_strptime.py", line 362, in _strptime
(data_string, format))
ValueError: time data ' Thu Jun 02 08:00:00 EDT 2022' does not match format ' %a %b %d %H:%M:%S %Z %Y'
During handling of the above exception, another exception occurred:

Linux服务器日期

$ date
Wed Feb  2 08:08:36 CST 2022

文档中的第6点告诉我们,strptime并不能解析所有时区格式。

%Z[…]因此,居住在日本的人可能将JST、UTC和GMT作为有效值,但可能不是EST。它将为无效值引发ValueError。

如果可能,您可以使用-u标志获取服务器日期并解析UTC时间戳。

date -u
Mi 2. Feb 14:39:11 UTC 2022

PS:还要注意字符串中的前导空格。若EDT在您的系统中可用,则Value Error可能是enddate和enddate1之间的混淆造成的。' Thu Jun 02 08:00:00 EDT 2022'enddate = 'Thu Jun 02 08:00:00 EDT 2022'

遗憾的是,strptime只支持时区的一个子集。

如果您可以确保输入不包含EDT或EST以外的任何其他时区,则可以用相应的UTC偏移量替换这些时区,并使用%z而不是%Z:

from datetime import datetime
date_str = "Thu Jun 02 08:00:00 EDT 2022"
date_str = date_str.replace("EDT", "-0400")
date_str = date_str.replace("EST", "-0500")
date_parsed = datetime.strptime(date_str, "%a %b %d %H:%M:%S %z %Y")
# 2022-06-02 08:00:00-04:00
print(date_parsed)

相关内容

  • 没有找到相关文章

最新更新