2010-02-23 20 views
19

Estoy tratando de convertir una cadena "20091229050936" en "5:09 29 de diciembre de 2009 (UTC)"la conversión de una cadena a una cadena con formato de fecha y hora usando Python

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

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

Claramente, he cometido un error: el tiempo es incorrecto, es un objeto de fecha y hora. ¡Tiene una fecha y un componente de tiempo!

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

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

¿Cómo se supone que debo convertir una cadena en una fecha-cadena con formato?

Respuesta

10

time.strptime devuelve un time_struct; time.strftime acepta un time_struct como un parámetro opcional:

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

da 05:09 29 December 2009 (UTC)

40

Para datetime objetos, strptime es una static method de la clase datetime, no una función libre en el módulo de 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

punto pedante: Es un método de clase, no es un método estático. La diferencia es que los métodos de clase se pasan a la clase como un argumento y, por lo tanto, pueden comportarse dinámicamente para las subclases; Los constructores alternativos (como 'strptime') son siempre (o al menos deberían ser siempre) métodos de clase. – ShadowRanger

1

Para mí, este es el mejor y también funciona en Google App Engine

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

Puede utilizar easy_date para hacer más fácil:

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