2010-03-17 13 views
1

Ma chaîne de saisie est '16-MAR-2010 03:37:04' et je souhaite la stocker en tant que date/heure.Dépannage 'ValueError: les données de temps ... ne correspondent pas au format' lors de l'utilisation de datetime.strptime

Je suis en train d'utiliser:

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

obtenir une erreur:

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

Répondre

4

Edit:
Comme John mentions, le rendre plus facile sur vous-même et retirer les plus grands et les espaces de fin.

Une autre pensée:
Votre locale actuel ne peut pas spécifier "MAR" comme abréviation d'un mois.

Qu'est-ce que la sortie de ce code donne ?:

import locale 
locale.getdefaultlocale() 

J'ai testé votre code sur une machine Linux (Ubuntu 9.10, Python 2.6.4) et a obtenu le ValueError.
J'ai enlevé les espaces, changé pour les paramètres régionaux non anglais (Czech), et j'ai obtenu l'erreur ValueError.

Note académique:
Bizarrement votre code fonctionne sur Windows XP Python 2.5.5 avec les espaces superflus:

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

Les docs pour le module locale mentionne "" "ABMON_1 ... ABMON_12 renvoie le nom abrégé du n-ième mois "" "mais ceux-ci (et d'autres choses utiles) ne semblent pas exister. Des indices? –

+0

@John: travaillé avec les espaces de début et de fin sur WinXP Python version 2.5. Juste essayé sur Ubuntu (Python 2.6.4) et a obtenu l'erreur ValueError. – bernie

+0

Juste essayé sur quelle version de Python sur quelle manifestation de * nix? –

2

Perdez les espaces à l'avant et à l'arrière de votre format. Je pensais que strptime a été documenté pour varier en fonction des caprices de celui qui a écrit le runtime C pour votre boîte. Cependant, il semble que je me trompe. Ce qui voudrait dire qu'il y a un bug dans Python.

Python 2.6.4 sous Windows n'aime pas les espaces de fin de premier plan; voir ci-dessous.

* x utilisateurs, qu'est-ce que vous trouvez?

En attendant, utilisez le plus petit dénominateur commun - perdez les espaces. Vous pouvez également avoir un problème de locale, comme Adam l'a mentionné.

avec des espaces:

>>> 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 ' 

Sans espaces:

>>> datetime.datetime.strptime('16-MAR-2010 03:37:04',"%d-%b-%Y %H:%M:%S") 
datetime.datetime(2010, 3, 16, 3, 37, 4) 
>>> 
2

Votre chaîne de format a un espace de premier plan et un espace de fin, mais votre chaîne d'entrée ne fonctionne pas. Supprimez l'espace après le guillemet de début et avant le guillemet de fin.

0

Essayez ceci:

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

, ont également un look here comme référence pour la mise en forme DateTime en Python.