MENGAPA: kurma adalah objek
Dalam Python, kurma adalah objek. Karena itu, ketika Anda memanipulasinya, Anda memanipulasi objek, bukan string, bukan cap waktu atau apa pun.
Objek apa pun di Python memiliki representasi string DUA:
Representasi reguler yang digunakan oleh "cetak", bisa menggunakan str()
fungsi. Ini adalah format waktu terbanyak yang paling umum digunakan manusia dan digunakan untuk memudahkan tampilan. Jadi str(datetime.datetime(2008, 11, 22, 19, 53, 42))
memberimu '2008-11-22 19:53:42'
.
Representasi alternatif yang digunakan untuk mewakili sifat objek (sebagai data). Ini bisa menggunakan repr()
fungsi dan berguna untuk mengetahui data apa yang Anda manipulasi saat Anda sedang mengembangkan atau debugging. repr(datetime.datetime(2008, 11, 22, 19, 53, 42))
memberimu 'datetime.datetime(2008, 11, 22, 19, 53, 42)'
.
Apa yang terjadi adalah bahwa ketika Anda telah mencetak tanggal menggunakan "cetak", itu digunakan str()
sehingga Anda bisa melihat string tanggal yang bagus. Tetapi ketika Anda telah mencetak mylist
, Anda telah mencetak daftar objek dan Python mencoba untuk mewakili set data, menggunakan repr()
.
The How: apa yang ingin Anda lakukan dengan itu?
Nah, ketika Anda memanipulasi tanggal, terus menggunakan objek tanggal sepanjang jalan. Mereka mendapat ribuan metode yang berguna dan sebagian besar API Python mengharapkan tanggal sebagai objek.
Saat Anda ingin menampilkannya, gunakan saja str()
. Dalam Python, praktik yang baik adalah secara eksplisit membuang semuanya. Jadi tepat saat waktunya untuk mencetak, dapatkan representasi string dari kencan Anda menggunakan str(date)
.
Satu hal terakhir. Ketika Anda mencoba untuk mencetak tanggal, Anda mencetak mylist
. Jika Anda ingin mencetak tanggal, Anda harus mencetak objek tanggal, bukan wadahnya (daftar).
Misalnya, Anda ingin mencetak semua tanggal dalam daftar:
for date in mylist :
print str(date)
Perhatikan bahwa dalam kasus khusus itu , Anda bahkan dapat menghilangkan str()
karena cetakan akan menggunakannya untuk Anda. Tapi itu seharusnya tidak menjadi kebiasaan :-)
Kasus praktis, menggunakan kode Anda
import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print mylist[0] # print the date object, not the container ;-)
2008-11-22
# It's better to always use str() because :
print "This is a new day : ", mylist[0] # will work
>>> This is a new day : 2008-11-22
print "This is a new day : " + mylist[0] # will crash
>>> cannot concatenate 'str' and 'datetime.date' objects
print "This is a new day : " + str(mylist[0])
>>> This is a new day : 2008-11-22
Pemformatan tanggal lanjut
Tanggal memiliki representasi default, tetapi Anda mungkin ingin mencetaknya dalam format tertentu. Dalam hal ini, Anda bisa mendapatkan representasi string khusus menggunakan strftime()
metode ini.
strftime()
mengharapkan pola string yang menjelaskan bagaimana Anda ingin memformat tanggal Anda.
EG:
print today.strftime('We are the %d, %b %Y')
>>> 'We are the 22, Nov 2008'
Semua huruf setelah "%"
mewakili format untuk sesuatu:
%d
adalah nomor hari
%m
adalah nomor bulan
%b
adalah singkatan bulan
%y
adalah tahun dua digit terakhir
%Y
adalah sepanjang tahun
dll
Lihat dokumentasi resmi , atau referensi cepat McCutchen yang tidak dapat Anda ketahui semuanya.
Sejak PEP3101 , setiap objek dapat memiliki formatnya sendiri yang digunakan secara otomatis oleh format metode string apa pun. Dalam hal datetime, formatnya sama dengan yang digunakan pada strftime. Jadi Anda bisa melakukan hal yang sama seperti di atas seperti ini:
print "We are the {:%d, %b %Y}".format(today)
>>> 'We are the 22, Nov 2008'
Keuntungan dari formulir ini adalah Anda juga dapat mengonversi objek lain secara bersamaan.
Dengan diperkenalkannya string string yang diformat (sejak Python 3.6, 2016-12-23) ini dapat ditulis sebagai
import datetime
f"{datetime.datetime.now():%Y-%m-%d}"
>>> '2017-06-15'
Lokalisasi
Tanggal dapat secara otomatis beradaptasi dengan bahasa dan budaya lokal jika Anda menggunakannya dengan cara yang benar, tetapi itu agak rumit. Mungkin untuk pertanyaan lain tentang SO (Stack Overflow) ;-)
str()
(ke setiap elemen daftar), karena itulah yangprint
secara implisit dilakukan padatoday
objek solo Anda .