Apakah ada format untuk mencetak datetimes Python yang tidak akan menggunakan zero-padding pada tanggal dan waktu?
Format yang saya gunakan sekarang:
mydatetime.strftime('%m/%d/%Y %I:%M%p')
Hasil: 29/02/2012 05:03 PM
Diinginkan: 29/2/2012 5:03
Format apa yang merepresentasikan bulan sebagai '2' bukan '02', dan waktu sebagai '5:03 PM' bukan '05: 03PM '
python
datetime
formatting
zero-pad
Yarin
sumber
sumber
.lstrip("0")
untuk menghilangkan nol di depan.Alternatif lain untuk menghindari aspek nol di depan "semua atau tidak ada" di atas adalah dengan menempatkan tanda minus di depan jenis bidang:
mydatetime.strftime('%-m/%d/%Y %-I:%M%p')
Kemudian ini: '4/10/2015 03:00'
Menjadi: '4/10/2015 3:00 AM'
Anda dapat secara opsional menempatkan minus di depan hari jika diinginkan.
Sunting: Fitur minus berasal dari perpustakaan GNU C ("glibc") seperti yang disebutkan di halaman manual strftime Linux di bawah "Catatan Glibc"
sumber
date.__format__
ortime.strftime
, docs.python.org/3/library/… , dan docs.python.org/3.8/library/time.html#time.strftime masingSistem pemformatan string baru menyediakan alternatif untuk
strftime
. Ini cukup mudah dibaca - memang, mungkin lebih disukaistrftime
pada akun itu. Belum lagi fakta bahwa itu tidak nol-pad:>>> '{d.month}/{d.day}/{d.year}'.format(d=datetime.datetime.now()) '3/1/2012'
Karena Anda mungkin menginginkan bantalan nol di bidang menit, Anda dapat melakukan ini:
>>> '{d.month}/{d.day}/{d.year} {d.hour}:{d.minute:02}'.format(d=now) '3/1/2012 20:00'
Jika Anda menginginkan waktu "reguler" daripada waktu "militer", Anda masih dapat menggunakan
strftime
penentu standar juga. Mudah, untuk tujuan kita,strftime
tidak memberikan kode untuk waktu empuk 12 jam dengan kosong bukannya nol:'{d.month}/{d.day}/{d.year} {d:%l}:{d.minute:02}{d:%p}'.format(d=now) '4/4/2014 6:00PM'
Sayangnya, ini menjadi agak kurang terbaca. Dan seperti yang ditunjukkan @mlissner,
strftime
akan gagal di beberapa (semua?) Platform untuk tanggal sebelum tahun 1900.sumber
"{0.day} {0:%B %Y}".format(d)
yang akan memberi Anda'2 August 2013'
hari komentar ini :)Jawaban yang diterima bukan solusi yang tepat (IMHO) Metode terdokumentasi yang tepat:
Di Linux "#" diganti dengan "-":
% -d,% -H,% -I,% -j,% -m,% -M,% -S,% -U,% -w,% -W,% -y,% -Y
Di Windows "-" diganti dengan "#":
% # d,% # H,% # I,% # j,% # m,% # M,% # S,% # U,% # w,% # W,% # y,% # Y
#Linux mydatetime.strftime('%-m/%d/%Y %-I:%M%p') # Windows mydatetime.strftime('%#m/%d/%Y %#I:%M%p')
Sumber: https://msdn.microsoft.com/en-us/library/fe06s4ak.aspx
Seperti yang dinyatakan oleh Sagneta: Trik hash # di Windows hanya tersedia untuk executable python asli. ini tidak akan berfungsi untuk implementasi python berbasis cygwin.
sumber
Jawaban bagus dari Chris Freeman di Linux.
Di windows, ini:
mydate.strftime('%#m/%#d/%Y')
Pikir itu mungkin membantu.
sumber
"% l" (itu L huruf kecil) bekerja untuk satu jam (bukan "% I"). Saya hanya mengetahui ini dari jawaban lain di sini
Python strftime - tanggal tanpa awalan 0?
tapi sayangnya mereka tidak memiliki kode untuk elemen lain dari tanggal / waktu.
sumber