0

私には大きな検索フィールドがあり、ユーザーは任意のテキストを入力して検索できます。

今、私は私の検索に生年月日を追加する必要があります。ドブピッカーで新しいテキストボックスを追加していません。ユーザーがさまざまな形式で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()

おそらくこれで問題は解決しますが、私はそれを使用しておらず、dateutil.tx 関数が必要かどうかわかりません。

于 2010-08-17T13:41:18.287 に答える