我正在使用Python 3.6。
我在重新格式化日期时遇到问题。我的代码当前正在处理610个日期,但代码会在包含8月份的日期上抛出值错误。
错误:时间数据'2017年8月30日'与格式'%B%d,%Y'不匹配
这是我的代码尝试重新格式化的HTML字符串。
<td>
<div class="date">
<span data-date-format="MMMM Do, YYYY" data-date-value="2017-08-30T16:04:39.3+00:00" data-hook="datetime">August 30th, 2017</span>
</div>
</td>
此字符串中的日期 2017年8月30日,那么导致价值错误的原因是什么?
这是我的代码:
publishedDateFormat = table.find('div', {'class': 'date'})
for date in publishedDateFormat.find('span'):
cleanDate = date.replace('nd', '').replace('rd', '').replace('st', '').replace('th', '')
locale.setlocale(locale.LC_ALL, 'en_US')
publishedDate = datetime.datetime.strptime(cleanDate, '%B %d, %Y').strftime('%m%d%Y')
list_of_cells.append(publishedDate)
答案 0 :(得分:2)
在您的代码中
cleandate = re.sub('([0-9])(nd|rd|st|th)' , '\g<1>', date)
replace('st','')正在将August改为Augu,这导致了错误。
请更正您的格式化。
使用正则表达式收集日期字段,然后创建一个cleanDate对象,如下所示: -
cleanDate = date.replace('nd', '').replace('rd', '').replace('st', '').replace('th', '')
答案 1 :(得分:1)
造成问题的一行是:
cleanDate = date.replace('nd', '').replace('rd', '').replace('st', '').replace('th', '')
您正在摆脱"st"
的{{1}}。
我建议使用正则表达式(或其他方法)来检查它前面的字符是否是数字("August"
)。
正则表达式的例子:
[0-9]