0

我有一个很大的搜索字段,用户可以在其中输入任何文本,它会搜索它。

现在我需要将 dob 添加到我的搜索中。我没有添加带有 dob 选择器的新文本框。我只是希望用户能够输入多种格式的 dob,它会弄清楚的。

IE 用户可以使用以下任意组合进行搜索:

  • 1970 年 8 月 25 日
  • 25-08-1970
  • 1970/08/25
  • 1970-08-25

我的程序必须找出每个的 dmy。

有没有更好的办法?

def parse(dob):
    for d in dob.split(" "):
       # find the dob
       if len(d) == 10:
           # its a dob
           if d[0:4].isdigit() # this is the year
               year = d[0:4]
               month = d[5:7]
               day = d[8:10]
            elif d[6:10].isdigit() # this is the year
               day = d[0:2]
               month = d[3:5]
               year= d[6:10]
4

2 回答 2

2

Python-dateutil应该让你的生活更轻松。

from dateutil.parser import parse as dparse
for each in ('25/08/1970', '25-08-1970', '1970/08/25', '1970-08-25'):
    dparse(each)

dparse(each)将返回一个datetime.datetime实例。datetime您可以从实例中获取日期、月份和年份。

更新

正如 mp0int指出的那样,请记住进行本地化。

于 2010-08-17T13:20:57.513 回答
1

Dateutil.parser.parse 是一个讨厌的函数,必须小心使用,例如

In [16]: parse('2010-05-01')
Out[16]: datetime.datetime(2010, 5, 1, 0, 0)

In [17]: parse('01-05-2010')
Out[17]: datetime.datetime(2010, 1, 5, 0, 0)

本地化是日期时间格式的一个重要问题。

a = parse('01-05-2010')
a.astimezone(dateutil.tx.tzutc()) # not sure about dateutil.tx.tzutc()

可能这会解决你的问题,但我没有使用它,我不确定 wwitch dateutil.tx 函数是你需要的。

于 2010-08-17T13:41:18.287 回答