2012-07-24 14 views
6

Sto cercando di utilizzare oggetti datetime, tra cui datetime.month, datetime.day e datetime.hour.formato data/ora

Il problema è che questi oggetti (ad esempio datetime.month) forniscono valori come 1, 2, 3 e così via su 12. Invece, ho bisogno di questi nel formato 01,02,03 e così via su 12. C'è un problema simile con giorni e mesi.

Come posso passare a questo formato?


mi sono reso conto che questo non era una domanda molto chiara:

sto usando la formattazione delle stringhe ai valori di stampa da un dizionario che ho con timestamp.

Così, l'experssion è più o meno:

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

I miei valori erano originariamente nel formato corretto "%Y-%m-%d (come 2000-01-01). Usando quanto sopra, ottengo 2000-1-1.

+0

Troverete che '08' non è un valore in python. Se vuoi stamparli, usa strftime, non i singoli attributi. – geoffspear

+0

I valori in Python non contengono un formato. È necessario specificare il formato quando lo si stampa o convertirlo in una stringa. –

+0

@MarkRansom Vedi sopra, se sto usando la formattazione di stringhe con questi oggetti, sono definiti (con mese) da 1 a 12 inclusi. – ehertele

risposta

21

È possibile stampare i singoli attributi utilizzando la formattazione stringa:

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

O più recente formattazione di stringhe (introdotto in Python 2.6):

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

Nota che anche:

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

funzionerà.

o in alternativa utilizzando il metodo degli oggetti datetime strftime:

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

E solo per ragioni di completezza:

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

sarà bene sostituire il codice nella tua modifica.

+0

+1 per 'strftime', ma nel tuo primo esempio, ho pensato che' str.format' fosse preferito all'operatore '%'? –

+0

@RicardoAltamirano - È, io uso spesso C ancora, quindi ho ancora bisogno di imparare di nuovo '.format' ogni volta che voglio usarlo. Ho aggiornato. – mgilson

+0

Nessun problema; Volevo solo assicurarmi, dato che uso sempre 'str.format' al posto di'% '. Stavo per aggiungere 'strftime' alla mia risposta, ma dal momento che è già ben coperto nel tuo, volevo solo chiarire quel punto e mantenere la tua risposta come la principale. –

2

È possibile convertire in stringhe e semplicemente pad loro:

import datetime 

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

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

Oppure si può semplicemente un str.format:

import datetime 

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

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

EDIT: Per rispondere alla domanda aggiornato, hai provato questo?

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

Hai detto che in origine li stavi stampando usando la formattazione di stringhe, quindi cosa hai cambiato? Questo codice:

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

in realtà non ha alcun senso, dato che sono un po 'poco chiaro per quali argomenti si sta passando presumo solo date.year, date.month, e date.day, ma non è chiaro.. Quale azione stai eseguendo con len(str)?

+0

Sembra il modo difficile per farlo, ma dal momento che funziona effettivamente riceverai un token +1 da me. –

+0

@MarkRansom Vero, è un po 'difficile, ma da quando ho notato che 'strftime' era già stato pubblicato poco prima di essere pubblicato, ho pensato di coprire ciò che non era. –

Problemi correlati