Risposte:
Puoi utilizzare strftime per aiutarti a formattare la data.
Per esempio,
import datetime
t = datetime.datetime(2012, 2, 23, 0, 0)
t.strftime('%m/%d/%Y')
produrrà:
'02/23/2012'
Maggiori informazioni sulla formattazione vedi qui
t = datetime.datetime.now()
per utilizzare la data corrente
date
e gli datetime
oggetti (e time
pure) supportano un mini-linguaggio per specificare l'output , e ci sono due modi per accedervi:
dt.strftime('format here')
; e'{:format here}'.format(dt)
Quindi il tuo esempio potrebbe apparire come:
dt.strftime('%m/%d/%Y')
o
'{:%m/%d/%Y}'.format(dt)
Per completezza: puoi anche accedere direttamente agli attributi dell'oggetto, ma poi ottieni solo i numeri:
'%s/%s/%s' % (dt.month, dt.day, dt.year)
Ne vale la pena il tempo impiegato per imparare la mini-lingua.
Per riferimento, ecco i codici utilizzati nella mini lingua:
%a
Weekday come nome abbreviato della locale. %A
Weekday come nome completo della locale. %w
Giorno della settimana come un numero decimale, dove 0 è domenica e 6 è sabato.%d
Giorno del mese come numero decimale con riempimento zero.%b
Mese come nome abbreviato della locale.%B
Mese come nome completo della locale.%m
Mese come numero decimale con riempimento zero. 01, ..., 12 %y
Anno senza secolo come un numero decimale con spaziatura zero. 00, ..., 99 %Y
Anno con secolo come un numero decimale. 1970, 1988, 2001, 2013 %H
Ora (orologio a 24 ore) come numero decimale con spaziatura zero. 00, ..., 23 %I
Ora (orologio a 12 ore) come numero decimale con spaziatura zero. 01, ..., 12 %p
Equivalente di Locale di AM o PM.%M
Minuto come numero decimale con spaziatura zero. 00, ..., 59 %S
Secondo come numero decimale con spaziatura zero. 00, ..., 59%f
Microsecondo come un numero decimale, con spaziatura zero a sinistra. 000000, ..., 999999%z
Offset UTC nel formato + HHMM o -HHMM (vuoto se ingenuo), +0000, -0400, +1030%Z
Nome del fuso orario (vuoto se ingenuo), UTC, EST, CST %j
Giorno dell'anno come un numero decimale con spaziatura zero. 001, ..., 366 %U
Numero della settimana dell'anno (domenica è il primo) come numero decimale con riempimento zero.%W
Numero della settimana dell'anno (il lunedì è il primo) come numero decimale.%c
Rappresentazione della data e dell'ora appropriate della locale. %x
Rappresentazione della data appropriata della locale. %X
Rappresentazione temporale appropriata della locale. %%
Un carattere letterale '%'.Un'altra opzione:
import datetime
now=datetime.datetime.now()
now.isoformat()
# ouptut --> '2016-03-09T08:18:20.860968'
datetime.datetime.now().ctime()
==>'Wed Sep 4 13:12:39 2019'
È possibile utilizzare semplici metodi di formattazione delle stringhe:
>>> dt = datetime.datetime(2012, 2, 23, 0, 0)
>>> '{0.month}/{0.day}/{0.year}'.format(dt)
'2/23/2012'
>>> '%s/%s/%s' % (dt.month, dt.day, dt.year)
'2/23/2012'
'{:%Y-%m-%d %H:%M}'.format(datetime(2001, 2, 3, 4, 5))
. Vedi di più su pyformat.info
type-specific formatting
può essere utilizzato anche:
t = datetime.datetime(2012, 2, 23, 0, 0)
"{:%m/%d/%Y}".format(t)
Produzione:
'02/23/2012'
Se stai cercando un modo semplice datetime
per convertire le stringhe e puoi ometterne il formato. È possibile convertire l' datetime
oggetto in str
e quindi utilizzare la suddivisione in array.
In [1]: from datetime import datetime
In [2]: now = datetime.now()
In [3]: str(now)
Out[3]: '2019-04-26 18:03:50.941332'
In [5]: str(now)[:10]
Out[5]: '2019-04-26'
In [6]: str(now)[:19]
Out[6]: '2019-04-26 18:03:50'
Ma nota la seguente cosa. Se altre soluzioni aumenteranno AttributeError
quando una variabile è None
in questo caso, riceverai una 'None'
stringa.
In [9]: str(None)[:19]
Out[9]: 'None'
È possibile convertire un oggetto datetime in una stringa lavorando direttamente con i componenti dell'oggetto datetime.
from datetime import date
myDate = date.today()
#print(myDate) would output 2017-05-23 because that is today
#reassign the myDate variable to myDate = myDate.month
#then you could print(myDate.month) and you would get 5 as an integer
dateStr = str(myDate.month)+ "/" + str(myDate.day) + "/" + str(myDate.year)
# myDate.month is equal to 5 as an integer, i use str() to change it to a
# string I add(+)the "/" so now I have "5/" then myDate.day is 23 as
# an integer i change it to a string with str() and it is added to the "5/"
# to get "5/23" and then I add another "/" now we have "5/23/" next is the
# year which is 2017 as an integer, I use the function str() to change it to
# a string and add it to the rest of the string. Now we have "5/23/2017" as
# a string. The final line prints the string.
print(dateStr)
Uscita -> 23/05/2017
È possibile convertire datetime in stringa.
published_at = "{}".format(self.published_at)
La concatenazione di stringhe str.join
, può essere utilizzata per creare la stringa.
d = datetime.now()
'/'.join(str(x) for x in (d.month, d.day, d.year))
'3/7/2016'
DateTimeField
oDateField
in django. Grazie