2010-02-23 27 views
19

Je suis en train de convertir une chaîne "20091229050936" dans "05h09 29 Décembre 2009 (UTC)"Conversion d'une chaîne à une chaîne date-heure formatée en utilisant Python

>>>import time 
>>>s = time.strptime("20091229050936", "%Y%m%d%H%M%S") 
>>>print s.strftime('%H:%M %d %B %Y (UTC)') 

donne AttributeError: 'time.struct_time' object has no attribute 'strftime'

De toute évidence, j'ai fait une erreur: le temps est faux, c'est un objet datetime! Il a une date et un composant de temps!

>>>import datetime 
>>>s = datetime.strptime("20091229050936", "%Y%m%d%H%M%S") 

donne AttributeError: 'module' object has no attribute 'strptime'

Comment suis-je censé convertir une chaîne en une chaîne de date formatée?

Répondre

10

time.strptime renvoie un time_struct; time.strftime accepte un time_struct comme paramètre optionnel:

>>>s = time.strptime(page.editTime(), "%Y%m%d%H%M%S") 
>>>print time.strftime('%H:%M %d %B %Y (UTC)', s) 

donne 05:09 29 December 2009 (UTC)

40

Pour datetime objets, strptime est un static method de la classe datetime, pas une fonction libre dans le module datetime:

>>> import datetime 
>>> s = datetime.datetime.strptime("20091229050936", "%Y%m%d%H%M%S") 
>>> print s.strftime('%H:%M %d %B %Y (UTC)') 
05:09 29 December 2009 (UTC) 
+1

Point Pédant: Il est une méthode de classe, pas une méthode statique. La différence est que les méthodes de classe sont passées à la classe elle-même en tant qu'argument, et peuvent donc se comporter dynamiquement pour les sous-classes; les constructeurs alternatifs (comme 'strptime') sont toujours (ou du moins devraient toujours) être des méthodes de classe. – ShadowRanger

1

Pour moi, c'est le meilleur et ça marche aussi bien sur Google App Engine

Exemple montrant UTC-4

import datetime 
UTC_OFFSET = 4 
local_datetime = datetime.datetime.now() 
print (local_datetime - datetime.timedelta(hours=UTC_OFFSET)).strftime("%Y-%m-%d %H:%M:%S") 
1
from datetime import datetime 
s = datetime.strptime("20091229050936", "%Y%m%d%H%M%S") 
print("{:%H:%M %d %B %Y (UTC)}".format(s)) 
1

Vous pouvez utiliser easy_date pour le rendre facile:

import date_converter 
my_datetime = date_converter.string_to_string("20091229050936", "%Y%m%d%H%M%S", "%H:%M %d %B %Y (UTC)")