如何在Python 2.7中解析unicode月份名称以获取日期时间

5 投票
2 回答
1659 浏览
提问于 2025-04-17 10:23

我有一个字符串'u'20 січня 2012',我需要把它转换成日期时间对象。 (u'20 січня 2012'等于u'20 January 2012')

如果我有一个像'datetime.strptime('1 Jun 2005', '%d %b %Y')'这样的格式,转换起来就很简单。但如果月份是用不同的语言写的,我该怎么办呢?

(这是在appengine和python 2.7环境下的情况)

我希望能有一个方法,比如get_month(u'不同形式的月份名称', Language.RUS) -> int:'月份的数字',这样这个库就能处理不同形式的月份名称了。 比如说'1 Июнь'和'1 Июня'应该表示同一天。 我用这个方法来抓取网站和解析日期。

2 个回答

8

也许你可以先把它转换成一个日期时间对象,然后使用地区设置另一个地区,再进行一次转换。

这里有一些可以帮助你入门的内容。

import locale, datetime

In [1]: datetime.datetime.strptime('February', '%B')
Out[1]: datetime.datetime(1900, 2, 1, 0, 0)

In [2]: locale.setlocale(locale.LC_ALL, 'de_DE')
Out[2]: 'de_DE'

In [3]: datetime.date(2008, 2, 1).strftime('%B')
Out[3]: 'Februar'

In [4]: datetime.datetime.strptime('Februar', '%B')
Out[4]: datetime.datetime(1900, 2, 1, 0, 0)
1

有一个不错的解决方案,就是使用python_dateutil库中的解析方法,并为特定语言实现一个解析器信息类。

http://blog.elsdoerfer.name/2009/12/12/django-flexible-date-form-fields-accepting-almost-any-input/

撰写回答