Ini kode saya:
import datetime
today = datetime.date.today()
print(today)
Ini mencetak: 2008-11-22
itulah yang saya inginkan.
Tapi, saya punya daftar saya menambahkan ini dan kemudian tiba-tiba semuanya berjalan "miring". Ini kodenya:
import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print(mylist)
Ini mencetak yang berikut ini:
[datetime.date(2008, 11, 22)]
Bagaimana saya bisa mendapatkan kencan sederhana saja 2008-11-22
?
str()
(ke setiap elemen daftar), karena itulah yangprint
secara implisit dilakukan padatoday
objek solo Anda .Jawaban:
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. Jadistr(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 mencetakmylist
, Anda telah mencetak daftar objek dan Python mencoba untuk mewakili set data, menggunakanrepr()
.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 menggunakanstr(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:
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
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:
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 tahundll
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:
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
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) ;-)
sumber
inspect.isclass
untuk memastikan). Orang-orang cenderung mengatakan "ketik" untuk built-in dan "kelas" untuk yang lain, tapi itu tidak pentingEdit:
Setelah saran Cees, saya sudah mulai menggunakan waktu juga:
sumber
datetime.datetime
?datetime import datetime
, laluprint datetime().now().strftime("%Y-%m-%d %H:%M")
. Hanya perbedaan sintaks.from datetime import date; date.today().strftime("%Y-%m-%d")
masih terlihat unpythonic bagi saya, tapi itu yang terbaik tanpaimport time
. Saya pikir modul datetime adalah untuk matematika tanggal.from datetime import datetime as dt
dan sekarang kita bisa bermain dengandt.now()
Objek tanggal, waktu, dan waktu semua mendukung metode strftime (format), untuk membuat string yang mewakili waktu di bawah kendali string format eksplisit.
Berikut adalah daftar kode format dengan arahan dan artinya.
Inilah yang dapat kita lakukan dengan modul waktu dan modul dengan Python
Itu akan mencetak sesuatu seperti ini:
sumber
Gunakan date.strftime. Argumen pemformatan dijelaskan dalam dokumentasi .
Yang ini yang Anda inginkan:
Yang ini memperhitungkan Lokal. (melakukan hal ini)
sumber
Ini lebih pendek:
sumber
sumber
Atau bahkan
Keluar: '25 .12.2013
atau
Keluar: 'Hari Ini - 25.12.2013'
Keluar: 'Rabu'
Keluar: '__main ____ 2014.06.09__16-56.log'
sumber
Jawaban sederhana -
sumber
Dengan
datetime
pemformatan string tipe-spesifik (lihat jawaban nk9 menggunakanstr.format()
.) Dalam string string yang diformat (sejak Python 3.6, 2016-12-23):Tanggal / waktu Format arahan tidak didokumentasikan sebagai bagian dari Format String Sintaks melainkan dalam
date
,datetime
dantime
'sstrftime()
dokumentasi. Itu didasarkan pada Standar C 1989, tetapi termasuk beberapa arahan ISO 8601 sejak Python 3.6.sumber
Anda perlu mengonversi objek waktu tanggal ke string.
Kode berikut ini berfungsi untuk saya:
Beri tahu saya jika kamu membutuhkan bantuan.
sumber
Saya benci gagasan mengimpor terlalu banyak modul untuk kenyamanan. Saya lebih suka bekerja dengan modul yang tersedia yang dalam hal ini
datetime
daripada memanggil modul barutime
.sumber
a = datetime.datetime(2015, 04, 01, 23, 22).strftime('%Y-%m-%d %H:%M)
Anda dapat melakukan:
sumber
Mengingat fakta bahwa Anda meminta sesuatu yang sederhana untuk melakukan apa yang Anda inginkan, Anda dapat:
sumber
Bagi mereka yang menginginkan tanggal berbasis lokal dan tidak termasuk waktu, gunakan:
sumber
Anda mungkin ingin menambahkannya sebagai string?
sumber
Karena
print today
mengembalikan apa yang Anda inginkan, ini berarti bahwa fungsi objek hari ini__str__
mengembalikan string yang Anda cari.Jadi kamu bisa melakukannya
mylist.append(today.__str__())
juga.sumber
Anda dapat menggunakan easy_date untuk membuatnya mudah:
sumber
Penafian cepat atas jawaban saya - Saya baru belajar Python selama sekitar 2 minggu, jadi saya sama sekali tidak ahli; oleh karena itu, penjelasan saya mungkin bukan yang terbaik dan saya dapat menggunakan terminologi yang salah. Bagaimanapun, ini dia.
Saya perhatikan dalam kode Anda bahwa ketika Anda mendeklarasikan variabel
today = datetime.date.today()
Anda, Anda memilih untuk memberi nama variabel Anda dengan nama fungsi bawaan.Ketika baris kode berikutnya
mylist.append(today)
menambahkan daftar Anda, itu menambahkan seluruh stringdatetime.date.today()
, yang sebelumnya Anda tetapkan sebagai nilaitoday
variabel Anda , bukan hanya menambahkantoday()
.Sebuah solusi sederhana, walaupun mungkin tidak satu pun kebanyakan coders akan digunakan ketika bekerja dengan modul datetime, adalah mengubah nama variabel Anda.
Inilah yang saya coba:
dan itu mencetak
yyyy-mm-dd
.sumber
Berikut ini cara menampilkan tanggal sebagai (tahun / bulan / hari):
sumber
ini akan mencetak 6-23-2018 jika itu yang Anda inginkan :)
sumber
Dengan cara ini Anda bisa mendapatkan Tanggal diformat seperti contoh ini: 22-Jun-2017
sumber
%b
Anda akan mendapatkan kata-kata tiga bulan pertama, dan dengan%B
seluruh bulan. Contoh:datetime.datetime.now().strftime("%Y-%b-%d %H:%M:%S")
akan mengembalikan '2018-Okt-04 09:44:08'Saya tidak sepenuhnya mengerti, tetapi dapat digunakan
pandas
untuk mendapatkan waktu dalam format yang tepat:Dan:
Tapi ini menyimpan string tetapi mudah dikonversi:
sumber