1

私の入力文字列は'16-MAR-2010 03:37:04'、日時として保存したいです。

私は使用しようとしています:

db_inst.HB_Create_Ship_Date = datetime.strptime(fields[7]," %d-%b-%Y %H:%M:%S ") 
fields[7] = '16-MAR-2010 03:37:04' 

エラーが発生します:

::ValueError: time data '16-MAR-2010 03:37:04' does not match format ' %d-%b-%Y %H:%M:%S ' 
4

4 に答える 4

4

編集:ジョンが言及
している ように、自分で簡単にして、先頭と末尾のスペースを削除してください。

別の考え:
現在のロケールでは、月の省略形として "MAR" が指定されていない可能性があります。

このコードの出力は何を示していますか?:

import locale
locale.getdefaultlocale()

Linux マシン (Ubuntu 9.10、Python 2.6.4) でコードをテストしたところ、ValueError が発生しました。
スペースを削除し、英語以外のロケール (チェコ語) に変更したところ、ValueError が発生しました。

アカデミックノート:
奇妙なことに、あなたのコードは余分なスペースがある Windows XP Python 2.5.5 で動作します:

>>> from datetime import datetime
>>> dt = '16-MAR-2010 03:37:04'
>>> datetime.strptime(dt, " %d-%b-%Y %H:%M:%S ")
datetime.datetime(2010, 3, 16, 3, 37, 4)
于 2010-03-17T06:44:23.600 に答える
2

フォーマットの前後のスペースをなくします。strptime は、あなたのボックスの C ランタイムを書いた人の気まぐれに応じて変化するように文書化されていると思いました。しかし、私は間違っているようです。これは、Python にバグがあることを意味します。

Windows 上の Python 2.6.4 は、先頭の末尾のスペースが好きではありません。下記参照。

*x ユーザー、何を見つけましたか?

それまでは、スペースをなくして最小公分母を使用してください。Adam が述べたように、ロケールの問題もあるかもしれません。

スペースあり:

>>> datetime.datetime.strptime('16-MAR-2010 03:37:04'," %d-%b-%Y %H:%M:%S ")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\python26\lib\_strptime.py", line 325, in _strptime
    (data_string, format))
ValueError: time data '16-MAR-2010 03:37:04' does not match format ' %d-%b-%Y %H
:%M:%S '

スペースなし:

>>> datetime.datetime.strptime('16-MAR-2010 03:37:04',"%d-%b-%Y %H:%M:%S")
datetime.datetime(2010, 3, 16, 3, 37, 4)
>>>
于 2010-03-17T06:28:06.030 に答える
2

フォーマット文字列には先頭のスペースと末尾のスペースがありますが、入力文字列にはありません。開始引用符の後と終了引用符の前のスペースを削除します。

于 2010-03-17T06:28:16.670 に答える
0

これを試して:

db_inst.HB_Create_Ship_Date = datetime.strptime(fields[7],"%d-%b-%Y %H:%M:%S")

また、Python での DateTime フォーマットのリファレンスとして、こちらをご覧ください。

于 2010-03-17T06:30:51.187 に答える