2015-03-23 3 views
0

J'ai un datetime qui est une chaîne que je lis dans un fichier texte. Je veux couper les millisecondes supplémentaires, mais je veux d'abord le convertir en une variable datetime. C'est parce qu'il peut être dans différents formats en fonction de ce qui est dans le fichier texte. Cependant, tout ce que j'ai essayé veut que je connaisse déjà le format. S'il vous plaît jeter un oeil à ce que je suis en train ici:il reste des données non converties: .387000 en Python

import time, datetime 

mytime = "2015-02-16 10:36:41.387000" 
myTime = time.strptime(mytime, "%Y-%m-%d %H:%M:%S.%f") 

myFormat = "%Y-%m-%d %H:%M:%S" 

print datetime.datetime.fromtimestamp(time.mktime(time.strptime(mytime, myFormat))) 

Mais cela me donne cette erreur:

File "python", line 10, in <module> 
ValueError: unconverted data remains: .387000` 

Quelqu'un peut-il s'il vous plaît me dire comment faire un format datetime normal? Dans d'autres langues, je peux passer dans différents formats et ensuite le définir dans un nouveau format sans problème.

+0

@WilliamJackson oui il accepte. Essayez d'exécuter 'time.strptime (" 2015-02-16 10: 36: 41.387000 ","% Y-% m-% d% H:% M:% S.% f ")' dans votre shell Python. –

Répondre

9

Vous le faites en arrière. Essayez ceci:

from datetime import datetime 

mytime = "2015-02-16 10:36:41.387000" 
myTime = datetime.strptime(mytime, "%Y-%m-%d %H:%M:%S.%f") 

myFormat = "%Y-%m-%d %H:%M:%S" 

print "Original", myTime 
print "New", myTime.strftime(myFormat) 

Résultat:

Original 2015-02-16 10:36:41.387000 
New 2015-02-16 10:36:41 
+0

Vous êtes le maître! Merci beaucoup. – TheBigOnion

2

Vous avez oublié de référence microsecondes dans myFormat

myFormat = "%Y-%m-%d %H:%M:%S.%f" 

Quoi qu'il en soit, vous pouvez le convertir en moins d'étapes

from datetime import datetime 

mytime = "2015-02-16 10:36:41.387000" 
full = "%Y-%m-%d %H:%M:%S.%f" 
myTime = datetime.strptime(mytime, full) 
>>> datetime.datetime(2015, 2, 16, 10, 36, 41, 387000) 

Ici mytime est dans l'objet datetime. Si vous voulez imprimer sans microsecondes, utilisez le strftime

myfmt = "%Y-%m-%d %H:%M:%S" 
print datetime.strptime(mytime, full).strftime(myfmt) 
>>> 2015-02-16 10:36:41 
+0

Cela crée en fait une chaîne qui n'est pas un objet datetime, ce que le code OP essaie de faire –

+1

Tks @PadraicCunningham pour correction. –

-1

Si rien d'autre ne change, à savoir le format, sauf que vous laissez tomber les micro secondes à la fin, vous ne avez pas vraiment besoin d'appeler strftime . Vous pouvez juste substring il:

mytime = "2015-02-16 10:36:41.387000" 
mytime = mytime[:-7]  
print mytime 

Résultat:

2015-02-16 10:36:41 

Avertissement: Ceci est être applicable que si vous ne faites pas de reformater ou de réorganiser quoi que ce soit, et que si vous essayez de laisser tomber le dernier bit.