I have a Finnish representation of a date (tiistaina, 27. lokakuuta 2015) that I need to convert to a datetime object. However, the day and month names are not recognis
'%A, %d. %B %Y'
produces a different time string on my system too:
#!/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
You could use PyICU to parse a localized date/time string in a 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
Related: Python parsing date and find the correct locale_setting
It works but PyICU is a big dependency and you have to read C++ docs for most things.
There is dateparser module that should work if you add Finnish data to a simple yaml config -- similar to how it is done for other languages. Here's a working example for Dutch language:
#!/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
Related: Parse French date in python