从西班牙语解析日期和更改格式

时间:2017-03-13 09:41:14

标签: python date format

这可能是一个重复的问题,但因为我已阅读全部内容 关于它的评论,我不解决我的问题,我不得不再问。

我正在处理一个数据框,其中我有一个具有此外观的列:

print final['fecha_dato'][2]

31 de Enero del 2017

我这样做是为了让它更容易理解:

d = final['fecha_dato'][2]
d = d.replace(' de ','-')
d = d.replace(' del ','-')

我得到了这个输出: '31 -Enero-2017'

我想将其转换为31-01-2017格式,我试试这个以便制作 西班牙语可以理解:

locale.setlocale(locale.LC_ALL, 'en_US')

但它说:不支持的区域设置。

一旦我完成了这个,我想我将不得不做这样的事情:

datetime.strptime('6-Mar-2016', '%d-%b-%Y').strftime('%Y-%m-%d')

让我们看看问题是什么。如果你能给我一个使用替换的方法 用一句也很棒。 在此先感谢!!

2 个答案:

答案 0 :(得分:2)

您可以在一行中执行此操作,因为您的输出日期格式是纯数字格式,假设您的操作系统区域设置数据库设置正确。

from datetime import datetime
import locale 

locale.setlocale(locale.LC_ALL, 'es_ES.utf8')

print(datetime.strptime('31 de Enero del 2017', '%d de %B del %Y').strftime('%Y-%m-%d'))

<强>输出

2017-01-31

如果要输出包含日期和/或月份名称的日期,则需要分两个阶段进行,以便切换区域设置。

from datetime import datetime
import locale 

locale.setlocale(locale.LC_ALL, 'es_ES.utf8')
s = '31 de Enero del 2017'
d = datetime.strptime(s, '%d de %B del %Y')

locale.setlocale(locale.LC_ALL, 'en_US.utf8')
print(d.strftime('%A, %B %d %Y'))        

<强>输出

Tuesday, January 31 2017

答案 1 :(得分:2)

您可能在Windows上,区域设置代码不同。首先解析语言环境,以便使用适当的代码正确读取日期字符串:

import locale
locale.setlocale(locale.LC_ALL, 'esp_esp')

然后,正如您猜测的那样,您使用strptime解析字符串以获取日期对象,然后使用strftime所需的格式将其转换回字符串:

from datetime import datetime as dt
date = dt.strptime('31 de Enero del 2017', '%d de %B del %Y')
date_str = date.strftime('%Y-%m-%d')