ValueError:时间数据与格式不匹配

时间:2018-06-03 10:49:14

标签: python python-3.x datetime

我正在使用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)

2 个答案:

答案 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]