2010-03-17 145 views
1

我的輸入字符串是'16-MAR-2010 03:37:04',我想將它存儲爲日期時間。使用datetime.strptime時'ValueError:時間數據...與格式不匹配'

我試圖使用方法:

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

編輯:
作爲John mentions,使您更容易,並刪除前導和尾隨空格。

另一個想法:
您當前的locale可能未指定「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) 
+0

語言環境模塊文檔中提到 「」「ABMON_1 ... ABMON_12 返回縮寫名稱的第n個月「」「但這些(和其他有用的東西)似乎並不存在。任何線索? –

+0

@John:使用WinXP Python版本2.5的前後空格。剛剛嘗試在Ubuntu(Python 2.6.4)並得到了ValueError。 – bernie

+0

剛剛嘗試了什麼版本的Python上* nix的表現形式? –

2

在前面,你的格式的回失去的空間。我認爲strptime被記錄爲取決於編寫C運行時的人爲你的盒子而異。但是,似乎我錯了。這意味着Python中存在一個錯誤。

Windows上的Python 2.6.4不喜歡前導空格;見下文。

* x個用戶,你有什麼發現?

與此同時,使用最低公分母 - 失去空格。正如亞當所說,你也可能會遇到區域問題。

用空格:

>>> 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) 
>>> 
2

你的格式字符串具有領先的空間和尾部空間,但你的輸入字符串沒有。刪除起始引號和結束引號之前的空格。

0

試試這個:

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

此外,有look here作爲在Python日期時間格式的參考。

相關問題