1

4 月 23 日datetimeを表すインスタンスを取得しようとしていますが、渡された引数が である場合は常に3 月 4日を取得します。設定は役に立ちません。'3.4'dayfirst=False

In [115]: from dateutil import parser

In [116]: parser.parse('4-23', ) #√
Out[116]: datetime.datetime(2014, 4, 23, 0, 0)

In [117]: parser.parse('4/23', ) #√
Out[117]: datetime.datetime(2014, 4, 23, 0, 0)

In [118]: parser.parse('4.23', ) #×
Out[118]: datetime.datetime(2014, 3, 4, 0, 0)

In [120]: parser.parse('4.23', dayfirst=False) #×
Out[120]: datetime.datetime(2014, 3, 4, 0, 0)

のバグparserですか?

4

1 に答える 1

-1

簡単な答えは、ドット文字は、ISO 形式で表される時間文字列のコンテキストで使用されるため、parse メソッドによって時間単位間の区切り文字としてサポートされていないということです。

すべてのドットをスラッシュ (/) またはハイフン (-) に変換してみてください

parser.parse('4.23'.replace('.','/'))

この問題を解決するには

編集(新しいコメントに対処するため):

これが実際の動作例です

パーサーは以下のように動作します:

>>> parser.parse('4/11/2019', dayfirst=True)
datetime.datetime(2019, 11, 4, 0, 0)
>>> parser.parse('4/11/2019', dayfirst=False)
datetime.datetime(2019, 4, 11, 0, 0)

パーサーは、呼び出し元に代わってエラーを想定し、dayfirstパラメーターを無効にして問題を自動修正しようとします。

>>> parser.parse('3/13/2019', dayfirst=False)
datetime.datetime(2019, 3, 13, 0, 0)
>>> parser.parse('3/13/2019', dayfirst=True)
datetime.datetime(2019, 3, 13, 0, 0)

13 か月目は存在しないため、パーサーは呼び出し側がパラメーターを誤って要求したと想定し、例外をスローする代わりに をdayfirst無効にすることで問題を解決しようとします。dayfirstこれは、このパーサーの別の問題です。

于 2014-03-21T06:53:48.607 に答える