2012-07-24 28 views
6

Estoy tratando de usar objetos datetime, incluyendo datetime.month, datetime.day y datetime.hour.datetime objects format

El problema es que estos objetos (digamos datetime.month) dan valores como 1, 2, 3, y así sucesivamente a 12. En su lugar, los necesito en el formato 01,02,03 y así sucesivamente a 12. Hay un problema similar con días y meses.

¿Cómo puedo cambiar a este formato?


me di cuenta de que esto no era una pregunta muy clara:

estoy usando el formato de cadenas de impresión a los valores de un diccionario que tengo con marcas de tiempo.

Así, el experssion es más o menos:

print "%s-%s-%s"%(date.year, date.month, date.day, etc., len(str)) |

Mis valores estaban originalmente en el formulario correcto "%Y-%m-%d (como 2000-01-01). Usando lo anterior, obtengo 2000-1-1.

+0

Encontrarás que '08' no es un valor en python. Si desea imprimirlos, use strftime, no los atributos individuales. – geoffspear

+0

Los valores en Python no contienen un formato. Debe especificar el formato cuando lo imprima o lo convierta en una cadena. –

+0

@MarkRansom Vea más arriba, si uso el formato de cadenas con estos objetos, están definidos (con mes) para que sean del 1 al 12 inclusive. – ehertele

Respuesta

21

Puede imprimir los atributos individuales utilizando el formato de cadenas:

print ('%02d' % (mydate.month)) 

O más reciente formato de cadenas (introducido en Python 2.6):

print ('{0:02d}'.format(a.month)) # python 2.7+ -- '{:02d}' will work 

Tenga en cuenta que aun:

print ('{0:%m}'.format(a)) # python 2.7+ -- '{:%m}' will work. 

funcionará.

o, alternativamente, utilizando el método de los objetos de fecha y hora strftime:

print (mydate.strftime('%m')) 

Y sólo por el bien de la integridad:

print (mydate.strftime('%Y-%m-%d')) 

reemplazará bien el código en su edición.

+0

+1 por 'strftime', pero en su primer ejemplo, pensé que' str.format' era preferible al '' operador '' –

+0

@RicardoAltamirano - Es así, con frecuencia uso C todavía, así que todavía tengo que volver a aprender '.format' cada vez que quiera usarlo. He actualizado – mgilson

+0

Sin preocupaciones; Solo quería asegurarme, ya que siempre uso 'str.format' en lugar de'% '. Estaba a punto de agregar 'strftime' a mi respuesta, pero como ya está bien cubierto en el tuyo, solo quería aclarar ese punto y mantener tu respuesta como la principal. –

2

Puede convertirlos en cadenas y simplemente almohadilla ellos:

import datetime 

d = datetime.datetime(2012, 5, 25) 

m = str(d.month).rjust(2, '0') 
print(m) # Outputs "05" 

O usted podría apenas un str.format:

import datetime 

d = datetime.datetime(2012, 5, 25) 

print("{:0>2}".format(d.month)) 

EDIT: Para responder a la pregunta actualizada, ¿ha probado esto?

import datetime 
d = datetime.datetime(2012, 5, 25) 
print("{:0>4}-{:0>2}-{:0>2}".format(d.year, d.month, d.day)) 

Dijiste que originalmente las imprimías usando el formato de cadena, entonces, ¿qué cambiaste? Este código:

print "%s-%s-%s"%(date.year, date.month, date.day, etc., len(str)) 

en realidad no tiene ningún sentido, ya que soy un poco claro en cuanto a qué argumentos está de paso en Asumo simplemente date.year, date.month y date.day, pero no está claro.. ¿Qué acción estás realizando con len(str)?

+0

Parece la forma más difícil de hacerlo, pero como funciona realmente obtendrás una ficha +1 de mi parte. –

+0

@MarkRansom Cierto, es un poco difícil, pero como noté que 'strftime' ya estaba cubierto justo antes de publicar, pensé que cubriría lo que no. –