我有一个芬兰语代表日期( tiistaina,27。lokakuuta 2015 ),我需要将其转换为日期时间对象。但是,Python中的日期时间库无法识别日期和月份名称
我希望以下内容能够起作用:
import locale
from datetime import datetime
locale.setlocale(locale.LC_TIME, 'fi_FI')
the_date = datetime.strptime('tiistaina, 27. lokakuuta 2015', '%A, %d. %B %Y')
然而,这导致:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/_strptime.py", line 500, in _strptime_datetime
tt, fraction = _strptime(data_string, format)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/_strptime.py", line 337, in _strptime
(data_string, format))
ValueError: time data 'tiistaina, 27. lokakuuta 2015' does not match format '%A, %d. %B %Y'
我认为这是因为Python期待这一天是tiistai而不是tiistai na 和月份是lokakuu而不是lokakuu na
http://people.uta.fi/~km56049/finnish/timexp.html似乎暗示,根据具体情况,有不同的方式用芬兰语表示一天或一个月。
我如何将字符串tiistaina, 27. lokakuuta 2015
添加到日期时间对象?
答案 0 :(得分:1)
'%A, %d. %B %Y'
在我的系统上也产生不同的时间字符串:
#!/usr/bin/env python
import locale
from datetime import datetime
#NOTE: locale name is platform-dependent
locale.setlocale(locale.LC_TIME, 'fi_FI.UTF-8')
print(datetime(2015, 10, 27).strftime('%A, %d. %B %Y'))
# -> tiistai, 27. lokakuu 2015
您可以使用PyICU
来解析given format中的本地化日期/时间字符串:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from datetime import datetime
import icu # PyICU
tz = icu.ICUtzinfo.getDefault() # any ICU timezone will do here
df = icu.SimpleDateFormat('EEEE, dd. MMMM yyyy', icu.Locale('fi_FI'))
df.setTimeZone(tz.timezone)
ts = df.parse(u'tiistaina, 27. lokakuuta 2015')
print(datetime.fromtimestamp(ts, tz).date())
# -> 2015-10-27
相关:Python parsing date and find the correct locale_setting
它可以工作,但PyICU是一个很大的依赖项,你必须阅读大多数事情的C ++文档。
如果您dateparser
module,add Finnish data to a simple yaml config -- similar to how it is done for other languages应该有效。这是荷兰语的一个有效例子:
#!/usr/bin/env python
import dateparser # $ pip install dateparser
print(dateparser.parse(u'dinsdag, 27. oktober 2015',
date_formats=['%A, %d. %B %Y'],
languages=['nl']).date())
# -> 2015-10-27
答案 1 :(得分:1)
星期和月份名称的日期分别代替%A
和%B
的主格;但是,该日期格式在电子邮件情况下具有DOW,而在部分情况下具有该月份。在一般情况下,芬兰语中的Declension非常复杂,但是对于这种情况,您可以使用na
为DOW名称添加后缀以获取所需的essive,并将ta
添加到该月以获得参与者。
因此,strptime
格式'%Ana, %d. %Bta %Y'
fi_FI
语言环境保证适用于您的所有日期:
>>> datetime.datetime.strptime('tiistaina, 27. lokakuuta 2015', '%Ana, %d. %Bta %Y')
datetime.datetime(2015, 10, 27, 0, 0)