小能豆

ValueError 时间数据 'Fri Mar 11 15:59:57 EST 2016' 与格式 '%a %b %d %H:%M:%S %Z %Y' 不匹配

py

我试图简单地从以下日期创建一个日期时间对象:“Fri Mar 11 15:59:57 EST 2016”,使用以下格式:“%a%b%d%H:%M:%S%Z%Y”。

这是代码。

from datetime import datetime
date = datetime.strptime('Fri Mar 11 15:59:57 EST 2016', '%a %b %d %H:%M:%S %Z %Y')

但是,这会导致如下所示的 ValueError。

ValueError: time data 'Fri Mar 11 15:59:57 EST 2016' does not match format '%a %b %d %H:%M:%S %Z %Y'

也许我遗漏了格式字符串中明显错误的地方,但我已经检查了一遍又一遍。任何帮助都将不胜感激,谢谢。

编辑以反映评论/问题以获取更多信息:

我使用的 Python 版本是 2.7.6。

在 Ubuntu 14.04 上使用“locale”命令我得到以下信息:

$ locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

阅读 14

收藏
2024-11-17

共1个答案

小能豆

您遇到的问题是因为%Z格式说明符需要 Python 可以识别和处理的时区缩写。但是,在某些系统或版本上,Pythondatetime.strptime可能无法正确处理时区缩写('EST'就您的情况而言)。

在您的情况下,日期'Fri Mar 11 15:59:57 EST 2016'使用'EST'时区缩写,这在 Python 2.7.6 中并不总是能识别strptime

解决方案:

  1. 解决方法:一种常见的方法是在解析字符串之前将其替换'EST'为可识别的时区缩写,例如。'UTC'
  2. 替代方法:您也可以手动调整日期以删除或替换时区信息,但在这里我将演示一种使用字符串替换来处理它的简单方法:

替换后的代码示例:

from datetime import datetime

# Replace 'EST' with a recognized timezone (like 'UTC' or 'GMT')
date_str = 'Fri Mar 11 15:59:57 EST 2016'.replace('EST', 'UTC')

# Now parse the string
date = datetime.strptime(date_str, '%a %b %d %H:%M:%S %Z %Y')

print(date)

解释:

  • 如果我们用替换,该strptime函数就可以成功解析日期字符串,因为是一个可识别的时区缩写。'EST'``'UTC'``'UTC'

笔记:

  • 只要您愿意将其视为 ,此方法就会有效。如果您想要 (东部标准时间) 的精确时区转换,则需要使用类似库单独处理时区,以'EST'正确'UTC'处理'EST'pytz区转换。

示例pytz(用于正确处理时区):

from datetime import datetime
import pytz

# Parse the date without timezone
date_str = 'Fri Mar 11 15:59:57 2016'
date = datetime.strptime(date_str, '%a %b %d %H:%M:%S %Y')

# Add the timezone using pytz
est = pytz.timezone('US/Eastern')
date_est = est.localize(date)

print(date_est)

datetime这种方法通过将简单对象本地化到东部时区来确保正确处理时区。

2024-11-17