Konversi objek datetime menjadi String tanggal hanya dengan Python


282

Saya melihat banyak pada konversi string tanggal ke datetimeobjek dengan Python, tetapi saya ingin pergi ke arah lain.
aku mendapat

datetime.datetime(2012, 2, 23, 0, 0)

dan saya ingin mengubahnya menjadi string seperti '2/23/2012'.

Jawaban:


488

Anda dapat menggunakan strftime untuk membantu Anda memformat tanggal Anda.

Misalnya,

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

akan menghasilkan:

'02/23/2012'

Informasi lebih lanjut tentang pemformatan lihat di sini


6
Sangat berguna untuk DateTimeFieldatau DateFielddalam Django. Terima kasih
erajuan

3
gunakan t = datetime.datetime.now()untuk menggunakan tanggal saat ini
gizzmole

Sejauh yang saya tahu dari dokumen tidak ada cara untuk mengembalikan tanggal yang tidak nol, yaitu '2/23/2012'.
Ron Kalian

183

datedan datetimeobjek (dan timejuga) mendukung bahasa mini untuk menentukan output , dan ada dua cara untuk mengaksesnya:

  • metode langsung panggilan: dt.strftime('format here'); dan
  • metode format baru: '{:format here}'.format(dt)

Jadi contoh Anda bisa terlihat seperti:

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

atau

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

Demi kelengkapan: Anda juga dapat langsung mengakses atribut objek, tetapi kemudian Anda hanya mendapatkan angka:

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

Waktu yang dibutuhkan untuk mempelajari bahasa mini tidak sia-sia.


Untuk referensi, berikut adalah kode yang digunakan dalam bahasa mini:

  • %a Hari kerja sebagai nama singkatan lokal.
  • %A Hari kerja sebagai nama lengkap lokal.
  • %w Hari kerja sebagai angka desimal, di mana 0 adalah hari Minggu dan 6 adalah hari Sabtu.
  • %d Hari dalam sebulan sebagai angka desimal nol-empuk.
  • %b Bulan sebagai nama singkatan lokal.
  • %B Bulan sebagai nama lengkap lokal.
  • %m Bulan sebagai angka desimal nol-empuk. 01, ..., 12
  • %y Tahun tanpa abad sebagai angka desimal nol-empuk. 00, ..., 99
  • %Y Tahun dengan abad sebagai angka desimal. 1970, 1988, 2001, 2013
  • %H Jam (jam 24 jam) sebagai angka desimal nol-empuk. 00, ..., 23
  • %I Jam (jam 12 jam) sebagai angka desimal nol-empuk. 01, ..., 12
  • %p Setara dengan AM atau PM.
  • %M Menit sebagai angka desimal nol-empuk. 00, ..., 59
  • %S Kedua sebagai angka desimal nol-empuk. 00, ..., 59
  • %f Microsecond sebagai angka desimal, nol-empuk di sebelah kiri. 000000, ..., 999999
  • %z UTC diimbangi dalam bentuk + HHMM atau -HHMM (kosong jika naif), +0000, -0400, +1030
  • %Z Nama zona waktu (kosong jika naif), UTC, EST, CST
  • %j Hari dalam setahun sebagai angka desimal nol-empuk. 001, ..., 366
  • %U Nomor minggu dalam setahun (Minggu adalah yang pertama) sebagai angka desimal nol empuk.
  • %W Nomor minggu dalam setahun (Senin adalah yang pertama) sebagai angka desimal.
  • %c Representasi tanggal dan waktu yang sesuai dari lokal.
  • %x Representasi tanggal lokal yang sesuai.
  • %X Representasi waktu lokal yang sesuai.
  • %% Karakter '%' literal.

29

Pilihan lain:

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

Meskipun pertanyaannya adalah tentang mendapatkan "kencan saja", saya datang untuk ini, jadi terima kasih. Juga, untuk mendapatkan string yang lebih manusiawi: datetime.datetime.now().ctime()==>'Wed Sep 4 13:12:39 2019'
Denis

13

Anda dapat menggunakan metode pemformatan string sederhana:

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

3
sama halnya, Anda dapat melakukan sesuatu seperti '{:%Y-%m-%d %H:%M}'.format(datetime(2001, 2, 3, 4, 5)). Lihat lebih lanjut di pyformat.info
mway


5

Jika Anda mencari cara sederhana datetimeuntuk konversi string dan dapat menghilangkan format. Anda bisa mengonversi datetimeobjek ke strdan kemudian menggunakan array slicing.

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'

Tetapi perhatikan hal berikut. Jika solusi lain akan muncul AttributeErrorketika variabel Nonedalam hal ini Anda akan menerima 'None'string.

In [9]: str(None)[:19]
Out[9]: 'None'

3

Dimungkinkan untuk mengubah objek datetime menjadi string dengan bekerja secara langsung dengan komponen objek 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


2

Anda bisa mengonversi datetime ke string.

published_at = "{}".format(self.published_at)

2

Rangkaian string str.join,, dapat digunakan untuk membangun string.

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

1

Jika Anda menginginkan waktu juga, ikuti saja

datetime.datetime.now().__str__()

Mencetak 2019-07-11 19:36:31.118766di konsol untuk saya

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.