2015-11-01 2 views
-2

Cela me donne une chaîne. Comment puis-je revenir à un objet datetime pour pouvoir faire de l'arithmétique de date et autres?Datetime - String Round Trip

from datetime import datetime, timezone 
s = datetime.now(timezone.utc).astimezone().isoformat() 

Cet extrait de code produit une chaîne que je suis heureux, mais comment puis-je retourner à datetime?

2015-11-01T07:49:35.106745-08:00 
+1

Avez-vous envisagé de lire la documentation ou de faire d'autres recherches? – jonrsharpe

+0

l'intégration de la solution dans votre programme est ** votre travail **, ce n'est pas un service d'écriture de code. – jonrsharpe

Répondre

0

Ne pas convertir le temps en utilisant isoformat() avant de faire des calculs de dates.

Essayez ceci:

import datetime, time 

d0 = datetime.datetime.now() 
time.sleep(0.1) 
d1 = datetime.datetime.now() 

print('trip began:{}'.format(d0.isoformat())) 
print('trip ended:{}'.format(d1.isoformat())) 
delta = d1 - d0 
print('that took {} seconds'.format(delta.total_seconds())) 

Le ne fait pas au-dessus de la bonne chose pour les fuseaux horaires et l'heure d'été, mais votre question initiale semblait avoir que le travail partiel:

datetime.now(timezone.utc).astimezone()

Sortie de l'échantillon:

trip began:2015-11-01T08:52:28.326764 
trip ended:2015-11-01T08:52:29.331763 
that took 1.004999 seconds 
+0

Je veux avoir une chaîne lisible par l'homme comme horodatage. – mcu

+0

@ coding4fun veuillez fournir un exemple de sortie. – davejagoda

+0

S'il vous plaît voir mon post édité. Je voudrais être précis en millisecondes au moins. – mcu

1

Cela fonctionne, mais il est beaucoup plus occupé que je voudrais voir.

dt = datetime.strptime(s[:-3]+s[-2:], "%Y-%m-%dT%H:%M:%S.%f%z") 
print(dt)