2017-04-21 1 views
0

J'écris un code et je dois comparer deux dates qui proviennent de sources différentes (API et DB) mais j'ai un problème:Comment puis-je éliminer le 0 supplémentaire de la microseconde dans python datetime.datetime?

c'est ce que l'API et DB me redonnent:

import datetime 
a = datetime.datetime(2016, 8, 5, 3, 0, 23, 30000) 
b ='2016-08-05T03:00:23.3' 

si je compare a == b Faux Je reçois donc je suis en train de formater la première valeur de cette façon:

a.strftime("%Y-%m-%dT%H:%M:%S.%f") 

le problème est que dans le résultat que j'ai beaucoup de 0 supplémentaire:

'2016-08-05T03:00:23.30000' 

dans ce cas aussi, si je compare a == b je reçois False.

Existe-t-il un moyen d'ignorer tous les 0 à la fin de la microseconde?

+0

cela ne fonctionne pas, si j'utilise .rstrip (« 0 ») ma chaîne devient: « 2016-08-05T03: 00: 23.03 » qui a un 0 devant 3 dans la microseconde si le code trouve toujours la différence entre '2016-08-05T03: 00: 23.03' et '2016-08-05T03: 00: 23.3' –

+0

peut-être avez-vous manqué un 0 supplémentaire dans 'a'? 'a = datetime.datetime (2016, 8, 5, 3, 0, 23, 300000)' parce que la dernière partie est en microsecondes et 'a' sera par conséquent 2016-08-05T03: 00: 23.030000 et ne sera en effet pas être égal à 'b'. –

Répondre

2

Ces deux ne sont pas identiques; le datetime a 30 000 microsecondes mais la chaîne a 300 000. Au lieu de convertir le datetime en une chaîne, convertissez la chaîne en datetime au lieu de convertir la chaîne en
Cela donne une comparaison plus fiable.

import datetime 
a = datetime.datetime(2016, 8, 5, 3, 0, 23, 300000) # This should be equal 
b ='2016-08-05T03:00:23.3' 
c = datetime.datetime.strptime(b, "%Y-%m-%dT%H:%M:%S.%f") 
if a == c: 
    print "Equal" 
else: 
    print "Not equal"