time.strptime() for different languages

A

Adam Monsen

Anyone know of something that works like time.strptime(), but for
other languages? Specifically, Dutch (ex: "31 augustus 2005, 17:26")
and German?

Thinking out loud... since "31 augustus 2005, 17:26" is only different
by month name, I suppose I could just substitute the month name using
a translation table for English to Dutch month names.
 
B

Benjamin Niemann

Adam said:
Anyone know of something that works like time.strptime(), but for
other languages? Specifically, Dutch (ex: "31 augustus 2005, 17:26")
and German?

Thinking out loud... since "31 augustus 2005, 17:26" is only different
by month name, I suppose I could just substitute the month name using
a translation table for English to Dutch month names.

Have you tested it with the proper locale setting and strptime(dateString,
"%c")? I have not ;)
 
A

Adam Monsen

No, this doesn't seem to work, and I can't find anything in the
documentation indicating that it should.
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/usr/lib/python2.4/_strptime.py", line 292, in strptime
raise ValueError("time data did not match format: data=%s fmt=%s"
%
ValueError: time data did not match format: data=10 augustus 2005 om
17:26 fmt=%d %B %Y om %H:%M
 
F

Fredrik Lundh

Adam said:
No, this doesn't seem to work, and I can't find anything in the
documentation indicating that it should.

Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/usr/lib/python2.4/_strptime.py", line 292, in strptime
raise ValueError("time data did not match format: data=%s fmt=%s"
%
ValueError: time data did not match format: data=10 augustus 2005 om
17:26 fmt=%d %B %Y om %H:%M
(2005, 8, 10, 17, 26, 0, 2, 222, -1)

(see http://docs.python.org/lib/module-locale.html for more on this)

</F>
 
A

Adam Monsen

Strange, but I can't figure out how to switch back to the default
locale.
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/usr/lib/python2.4/_strptime.py", line 292, in strptime
raise ValueError("time data did not match format: data=%s fmt=%s"
%
ValueError: time data did not match format: data=10 August 2005 at
17:26 fmt=%d %B %Y at %H:%M


Also, locale.resetlocale() throws locale.Error (I saw some open bugs on
this).

Ugh! Is this stuff broken or is it just me?
 
A

Adam Monsen

Figured this out. I thought I'd post my results in case it is helpful
to someone else.

----------------------------------8<----------------------------------
import locale, time
# save old locale
old_loc = locale.getlocale(locale.LC_TIME)
locale.setlocale(locale.LC_TIME, 'nl_NL')
# seems to be the only way to avoid a ValueError from _strptime...
# now that's a badly behaved module!
import _strptime; reload(_strptime)
# parse local date
date = '10 augustus 2005 om 17:26'
format = '%d %B %Y om %H:%M'
dateTuple = time.strptime(date, format)
# switch back to previous locale
locale.setlocale(locale.LC_TIME, old_loc)
---------------------------------->8----------------------------------

If I try to do further date parsing in the same scope (with a different
locale), it fails. Let me know if you have any ideas about why.
 
A

Adam Monsen

One way I'm able to do further date parsing in other locales is to
switch the locale for LC_TIME, bust the _strptime regular expressions
manually, then call strptime() again. Here's a function to bust the
cache. This works for me, but your mileage may vary.

def bust_strptime_cache():
import _strptime
_strptime._cache_lock.acquire()
_strptime._TimeRE_cache = _strptime.TimeRE()
_strptime._regex_cache = {}
_strptime._cache_lock.release()

This has been filed as Python bug #1290505. (
http://sf.net/support/tracker.php?aid=1290505 ) A full test case is
attached to that bug.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,007
Latest member
obedient dusk

Latest Threads

Top