Jak zamienić datę i godzinę w języku Python na ciąg z datą w czytelnym formacie?

171
t = e['updated_parsed']
dt = datetime.datetime(t[0],t[1],t[2],t[3],t[4],t[5],t[6]
print dt
>>>2010-01-28 08:39:49.000003

Jak zamienić to w ciąg ?:

"January 28, 2010"
TIMEX
źródło
8
dt = datetime.datetime(*t[:7])

Odpowiedzi:

242

Klasa datetime ma metodę strftime. Dokumentacja Pythona dokumentuje różne formaty, które akceptuje:

W tym konkretnym przykładzie wyglądałoby to mniej więcej tak:

my_datetime.strftime("%B %d, %Y")
Cristian
źródło
1
Głupie pytanie ... Czy strftimePython 2 i 3 różnią się?
jww
A jeśli w jaki sposób
Xanlantos
112

Oto, jak możesz osiągnąć to samo, używając ogólnej funkcji formatowania Pythona ...

>>>from datetime import datetime
>>>"{:%B %d, %Y}".format(datetime.now())

Używane tutaj znaki formatujące są takie same, jak używane przez strftime . Nie przegap czołówki: w specyfikatorze formatu.

Użycie format () zamiast strftime () w większości przypadków może uczynić kod bardziej czytelnym, łatwiejszym do napisania i spójnym ze sposobem generowania sformatowanych danych wyjściowych ...

>>>"{} today's date is: {:%B %d, %Y}".format("Andre", datetime.now())

Porównaj powyższe z następującą alternatywą strftime () ...

>>>"{} today's date is {}".format("Andre", datetime.now().strftime("%B %d, %Y"))

Co więcej, następujące rzeczy nie będą działać ...

>>>datetime.now().strftime("%s %B %d, %Y" % "Andre")
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    datetime.now().strftime("%s %B %d, %Y" % "Andre")
TypeError: not enough arguments for format string

I tak dalej...

Samouk
źródło
1
Zastanawiałem się, jakie są zalety używania format () w tym przypadku w porównaniu z strftime (). Czy którakolwiek z metod przynosi korzyści inne niż osobiste preferencje? Jakie są różnice w wydajności?
Andre
2
@Andre Dziękujemy za pytanie! Osobiste preferencje często kierują się doświadczeniem. Zobacz moją zaktualizowaną odpowiedź, dlaczego wolę format () zamiast strftime (). Wydajność i Python to dwa słowa, które nie pasują do siebie. Nie przejmowałbym się zbytnio wydajnością, gdybym zdecydował się użyć Pythona. Kiedy potrzebuję wydajności, używam jakiegoś statycznego języka o wysokiej wydajności.
Samouk
1
W większości przypadków metoda formatowania jest prostsza. Porównaj: print 'Today is {:%B %d, %Y}'.format(datetime.now())do print 'Today is {}'.format(datetime.now().strftime('%B %d, %Y'). Jeśli mimo wszystko używasz metody format (), dlaczego nie użyć jej również do formatowania daty?
ChaimG
30

Używanie f-strings w Pythonie 3.6+.

from datetime import datetime

date_string = f'{datetime.now():%Y-%m-%d %H:%M:%S%z}'
Natim
źródło
Powoduje to zgłoszenie błędu składni: „Błąd składni: nieprawidłowa składnia”. Czy mógłbyś to rozwinąć?
sajid
Dobrze. Mam Pythona 3.5.1. Dlatego. Dziękuję za wyjaśnienie.
sajid
21

bardzo stare pytanie, wiem. ale z nowymi f-stringami (zaczynając od Pythona 3.6) są nowe opcje. więc tutaj dla kompletności:

from datetime import datetime

dt = datetime.now()

# str.format
strg = '{:%B %d, %Y}'.format(dt)
print(strg)  # July 22, 2017

# datetime.strftime
strg = dt.strftime('%B %d, %Y')
print(strg)  # July 22, 2017

# f-strings in python >= 3.6
strg = f'{dt:%B %d, %Y}'
print(strg)  # July 22, 2017

strftime()a strptime()Behavior wyjaśnia, co oznaczają specyfikatory formatu.

bohater hiro
źródło
9

Obiekt datetime w Pythonie ma atrybut method, który jest drukowany w czytelnym formacie.

>>> a = datetime.now()
>>> a.ctime()
'Mon May 21 18:35:18 2018'
>>> 
SuperNova
źródło
Jest to jeden z najlepszych, najłatwiejszych i najszybszych sposobów uzyskania daty i godziny w czytelnym formacie.
Mujeeb Ishaque
-2

To jest dla sformatowania daty?

def format_date(day, month, year):
        # {} betekent 'plaats hier stringvoorstelling van volgend argument'
        return "{}/{}/{}".format(day, month, year)
Thomas Wouters
źródło