Saat menggunakan Python strftime
, apakah ada cara untuk menghapus 0 pertama dari tanggal jika sebelum tanggal 10, yaitu. begitu 01
juga 1
? Tidak dapat menemukan sesuatu %
untuk itu?
Terima kasih!
Sebenarnya saya memiliki masalah yang sama dan saya menyadari bahwa, jika Anda menambahkan tanda hubung antara %
dan huruf, Anda dapat menghapus nol di depannya.
Sebagai contoh %Y/%-m/%-d
.
Ini hanya berfungsi pada Unix (Linux, OS X), bukan Windows (termasuk Cygwin). Pada Windows, Anda akan menggunakan #
, misalnya %Y/%#m/%#d
.
ValueError: '-' is a bad directive in format '%b %-d, %Y'
. OSX, Python 2.7.%#d
akan melakukan hal yang sama pada WindowsKita dapat melakukan hal semacam ini dengan munculnya
format
metode sejak python2.6:Meskipun mungkin di luar cakupan pertanyaan asli, untuk format yang lebih menarik, Anda dapat melakukan hal-hal seperti:
Dan pada python3.6, ini dapat diekspresikan sebagai string yang diformat sebaris :
sumber
time.strftime('%A %B %d, %Y')
, yang menghasilkan (sekarang, di lokal bahasa Inggris)Tuesday October 07, 2014
.__format__
pengait yang sangat menarik yang memungkinkan Anda menulis hal-hal seperti itu.'{dt.hour}'
menggunakan jam 24 jam :(. Menggunakan opsi kedua masih membawa Anda kembali ke penggunaan'{%#I}'
di Windows dan'{%-I}'
di Unix.Beberapa platform mungkin mendukung spesifikasi lebar dan presisi antara
%
dan huruf (seperti 'd' untuk hari bulan), menurut http://docs.python.org/library/time.html - tapi itu jelas non-portable solusi (mis. tidak bekerja di Mac saya ;-). Mungkin Anda dapat menggunakan ganti string (atau RE, untuk format yang benar-benar jahat) setelahstrftime
untuk memperbaikinya? misalnya:sumber
Berikut ini adalah dokumentasi dari pengubah yang didukung oleh
strftime()
di GNU C library. (Seperti yang dikatakan orang sebelumnya, mungkin tidak portabel.) Yang menarik bagi Anda mungkin:%e
alih-alih%d
akan menggantikan nol di awal bulan dengan spasiIni bekerja di Python saya (di Linux). Saya tidak tahu apakah itu akan berhasil pada Anda.
sumber
%-d
atas , ini berfungsi di OS X 10.8.5 dengan Python 2.7.2, tetapi tidak di Windows 7 Pro 64-bit dengan Python 2.7.3.sumber
.replace('X0','X').replace('X','')
? Lakukan saja.replace('X0', '')
dan itu akan baik.Pada Windows, tambahkan '#', seperti pada '% # m /% # d /% Y% # I:% M:% S% p'
Untuk referensi: https://msdn.microsoft.com/en-us/library/fe06s4ak.aspx
sumber
cukup terlambat ke pesta tetapi
%-d
bekerja pada saya.datetime.now().strftime('%B %-d, %Y')
menghasilkan sesuatu seperti "5 November 2014"Bersulang :)
sumber
ValueError: Invalid format string
di sistem Windows saya.Saya menemukan filter format tanggal template Django menjadi cepat dan mudah. Ini menghapus nol terkemuka. Jika Anda tidak keberatan mengimpor modul Django, periksa.
http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
sumber
import django.conf
django.conf.settings.configure()
Lihatlah di
-
bawah ini:sumber
cukup gunakan
replace
seperti ini:(datetime.date.now()).strftime("%Y/%m/%d").replace("/0", "/")
itu akan menampilkan:
sumber
Untuk
%d
Anda dapat mengonversi ke integer menggunakanint()
maka secara otomatis akan menghapus 0 memimpin dan menjadi integer. Anda kemudian dapat mengonversi kembali ke string menggunakanstr()
.sumber
menggunakan, misalnya, "% -d" tidak portabel bahkan di antara berbagai versi OS yang sama. Solusi yang lebih baik adalah mengekstraksi komponen tanggal secara terpisah, dan memilih antara operator pemformatan khusus tanggal dan akses atribut tanggal untuk setiap komponen.
sumber
Karena Python benar-benar hanya memanggil
strftime(3)
fungsi bahasa C pada platform Anda, mungkin ada karakter format yang dapat Anda gunakan untuk mengontrol nol di depan; cobaman strftime
dan lihat. Tapi, tentu saja, hasilnya tidak akan portabel, karena manual Python akan mengingatkan Anda. :-)Saya akan mencoba menggunakan
datetime
objek gaya baru sebagai gantinya, yang memiliki atribut sepertit.year
dant.month
dant.day
, dan menempatkan mereka melalui format normal, bertenaga tinggi dari%
operator, yang tidak mendukung kontrol nol terkemuka. Lihat http://docs.python.org/library/datetime.html untuk detailnya. Lebih baik lagi, gunakan"".format()
operator jika Python Anda memilikinya dan menjadi lebih modern; ini memiliki banyak opsi format untuk angka juga. Lihat: http://docs.python.org/library/string.html#string-formatting .sumber
Berdasarkan metode Alex, ini akan bekerja untuk kasus awal-string-dan setelah-spasi:
Saya suka ini lebih baik daripada .format atau% -d karena ini adalah cross-platform dan memungkinkan saya untuk tetap menggunakan strftime (untuk mendapatkan hal-hal seperti "November" dan "Senin").
sumber
Pertanyaan lama, tetapi% l (huruf kecil L) bekerja untuk saya di strftime: ini mungkin tidak berfungsi untuk semua orang, karena tidak terdaftar dalam dokumentasi Python yang saya temukan
sumber
sumber
ValueError: '_' is a bad directive in format '%a %b %_d %H:%M:%S %Y'
menggunakan python 3.5