2012-05-16 11 views

Odpowiedz

271

Możesz użyć strftime, aby pomóc w sformatowaniu daty.

np

import datetime 
t = datetime.datetime(2012, 2, 23, 0, 0) 
t.strftime('%m/%d/%Y') 

przyniesie:

'02/23/2012' 

Więcej informacji na temat formatowania zobaczyć here

+2

Bardzo przydatne dla 'DateTimeField' lub' DateField' w Django. Dzięki – erajuan

+0

użyj 't = datetime.datetime.now()', aby użyć bieżącej daty – gizzmole

+0

O ile mogę powiedzieć z dokumentacji nie ma sposobu, aby zwrócić niezerową wyściełaną datę tj. "2/2/2012". –

10

Można używać prostych ciągów formatowania metody:

>>> 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' 
+1

podobnie można zrobić coś w stylu '{:% Y-% m-% d% H:% M} '. (Datetime (2001, 2, 3, 4, 5))'.Zobacz więcej na pyformat.info – mway

81

date i datetime przedmiotów (i time również) obsługują mini-language to specify output i istnieją dwa sposoby dostępu do niego:

  • bezpośrednie wywołanie metody: dt.strftime('format here'); i
  • nowa metoda format: '{:format here}'.format(dt)

Więc Przykładem może wyglądać następująco:

dt.strftime('%m/%d/%Y') 

lub

'{:%m/%d/%Y}'.format(dt) 

kompletności boską: można też bezpośrednio przejść do atrybutów obiekt, ale dostaniesz tylko numery:

'%s/%s/%s' % (dt.month, dt.day, dt.year) 

Czas poświęcony na naukę mini-języka jest tego warty.


Dla porównania, oto kody stosowane w mini-język:

  • %a dzień tygodnia jako nazwy skróconej ustawień regionalnych.
  • %A Dzień roboczy jako pełne imię lokalizacji.
  • %w Dzień roboczy jako liczba dziesiętna, gdzie 0 to niedziela, a 6 to sobota.
  • %d Dzień miesiąca jako liczba dziesiętna z zerami.
  • Miesiąc jako skrócona nazwa lokalu.
  • Miesiąc jako pełne imię i nazwisko.
  • %m Miesiąc jako zerowa liczba dziesiętna. 01, ..., 12
  • %y Rok bez wieku jako liczba dziesiętna z zerowym zaplotem. 00, ..., 99
  • %Y Rok z wiekiem jako liczba dziesiętna. 1970, 1988, 2001, 2013
  • %H Godzina (zegar 24-godzinny) jako liczba dziesiętna z wyściełaną zerą. 00, ..., 23
  • %I Godzina (zegar 12-godzinny) jako liczba dziesiętna z wyściełaniem zerowym. 01, ..., 12
  • %p Ustawienia regionalne odpowiednika AM lub PM.
  • %M Minuta jako liczba dziesiętna z wyściełaniem zerowym. 00, ..., 59
  • %S Drugi jako numer dziesiętny z zerową wyściółką. 00, ..., 59
  • %f Mikrosekunda jako liczba dziesiętna, z lewej wyściełana zerami. 000000, ..., 999999
  • %z UTC przesunięcie w postaci + GGMM lub -HHMM (pusty jeśli naiwny), +0000, -0400, +1030
  • %Z nazwa strefy czasowej (pusty jeśli naiwny), UTC, EST, CST
  • %j Dzień roku jako liczba dziesiętna z wyściełaną zerą. 001, ..., 366
  • %U Numer tygodnia w roku (niedziela jest pierwszym) jako zero z wyściełaną liczbą dziesiętną.
  • %W Numer tygodnia w roku (poniedziałek jest pierwszy) jako liczba dziesiętna.
  • %c Ustawienia regionalne daty i czasu.
  • %x Odpowiednia reprezentacja daty w danym regionie.
  • %X Odpowiednia reprezentacja czasu w Locale.
  • %% Dosłowna postać "%".
+1

bounty idzie tutaj dla dobrego podsumowania – tinySandy

1

Łączenie ciągów, str.join, może być użyte do zbudowania napisu.

d = datetime.now() 
'/'.join(str(x) for x in (d.month, d.day, d.year)) 
'3/7/2016' 
14

Inna opcja:

import datetime 
now=datetime.datetime.now() 
now.isoformat() 
# ouptut --> '2016-03-09T08:18:20.860968' 
0

można przekonwertować datetime do łańcucha. published_at="{}".format(self.published_at)

-2

Możliwe jest przekonwertowanie obiektu datetime na ciąg znaków, pracując bezpośrednio z komponentami obiektu 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) 

Output -> 5/23/2017

+0

Proszę użyć linku [edit], aby wyjaśnić, w jaki sposób działa ten kod i nie tylko podać kod, ponieważ wyjaśnienie jest bardziej prawdopodobne, aby pomóc przyszłym czytelnikom. Zobacz także [odpowiedź]. [źródło] (http://stackoverflow.com/users/5244995) –

Powiązane problemy