Bagaimana cara mengubah datetime python menjadi string, dengan tanggal format yang dapat dibaca?

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

Bagaimana cara mengubahnya menjadi string ?:

"January 28, 2010"
TIMEX
sumber
8
dt = datetime.datetime(*t[:7])

Jawaban:

242

Kelas datetime memiliki strftime metode. Dokumen Python mendokumentasikan berbagai format yang diterimanya:

Untuk contoh khusus ini, akan terlihat seperti:

my_datetime.strftime("%B %d, %Y")
Cristian
sumber
1
Pertanyaan bodoh ... Apakah strftimeperbedaan antara Python 2 dan 3?
jww
Dan jika dengan cara yang
Xanlantos
112

Inilah cara Anda dapat melakukan hal yang sama dengan menggunakan fungsi format umum python ...

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

Karakter format yang digunakan di sini adalah sama dengan yang digunakan oleh strftime . Jangan lewatkan yang terdepan : dalam penentu format.

Menggunakan format () daripada strftime () dalam banyak kasus dapat membuat kode lebih mudah dibaca, lebih mudah untuk ditulis dan konsisten dengan cara output yang diformat dihasilkan ...

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

Bandingkan hal di atas dengan alternatif strftime () berikut ...

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

Selain itu, berikut ini tidak akan berfungsi ...

>>>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

Dan seterusnya...

Otodidak
sumber
1
Saya sudah bertanya-tanya apa manfaat menggunakan format () untuk kasus ini, melebihi strftime (). Apakah salah satu metode memberikan manfaat selain preferensi pribadi? Apa perbedaan kinerja?
Andre
2
@Andre Terima kasih atas pertanyaan Anda! Preferensi pribadi seringkali dipandu oleh pengalaman. Silakan lihat jawaban saya yang diperbarui untuk alasan mengapa saya lebih suka format () daripada strftime (). Kinerja dan Python adalah dua kata yang tidak cocok bersama. Saya tidak akan terlalu khawatir dengan kinerja jika saya memutuskan untuk menggunakan Python. Ketika saya membutuhkan kinerja saya menggunakan beberapa bahasa kinerja tinggi yang diketik secara statis.
Autodidact
1
Metode format lebih sederhana dalam banyak kasus. Bandingkan: print 'Today is {:%B %d, %Y}'.format(datetime.now())dengan print 'Today is {}'.format(datetime.now().strftime('%B %d, %Y'). Saat Anda menggunakan metode format (), mengapa tidak menggunakannya untuk format tanggal juga?
ChaimG
30

Menggunakan f-string, dalam Python 3.6+.

from datetime import datetime

date_string = f'{datetime.now():%Y-%m-%d %H:%M:%S%z}'
Natim
sumber
Ini menimbulkan kesalahan sintaksis: "SyntaxError: syntax tidak valid". Bisakah Anda jelaskan?
sajid
Baik. Saya punya Python 3.5.1. Itulah mengapa. Terimakasih atas klarifikasinya.
sajid
21

pertanyaan yang sangat lama, saya tahu. tetapi dengan f-string baru (mulai dari python 3.6) ada opsi segar. jadi di sini untuk kelengkapan:

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()dan strptime()Perilaku menjelaskan apa arti penentu format.

hiro protagonis
sumber
9

Objek datetime python memiliki atribut metode, yang dicetak dalam format yang dapat dibaca.

>>> a = datetime.now()
>>> a.ctime()
'Mon May 21 18:35:18 2018'
>>> 
SuperNova
sumber
Ini adalah salah satu cara terbaik, termudah dan tercepat untuk mendapatkan DateTime dalam format yang dapat dibaca.
Mujeeb Ishaque
-2

Ini untuk format tanggal?

def format_date(day, month, year):
        # {} betekent 'plaats hier stringvoorstelling van volgend argument'
        return "{}/{}/{}".format(day, month, year)
Thomas Wouters
sumber