Jawaban:
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 Windows
Kita dapat melakukan hal semacam ini dengan munculnya format
metode sejak python2.6:
>>> import datetime
>>> '{dt.year}/{dt.month}/{dt.day}'.format(dt = datetime.datetime.now())
'2013/4/19'
Meskipun mungkin di luar cakupan pertanyaan asli, untuk format yang lebih menarik, Anda dapat melakukan hal-hal seperti:
>>> '{dt:%A} {dt:%B} {dt.day}, {dt.year}'.format(dt=datetime.datetime.now())
'Wednesday December 3, 2014'
Dan pada python3.6, ini dapat diekspresikan sebagai string yang diformat sebaris :
Python 3.6.0a2 (v3.6.0a2:378893423552, Jun 13 2016, 14:44:21)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> dt = datetime.datetime.now()
>>> f'{dt:%A} {dt:%B} {dt.day}, {dt.year}'
'Monday August 29, 2016'
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) setelah strftime
untuk memperbaikinya? misalnya:
>>> y
(2009, 5, 7, 17, 17, 17, 3, 127, 1)
>>> time.strftime('%Y %m %d', y)
'2009 05 07'
>>> time.strftime('%Y %m %d', y).replace(' 0', ' ')
'2009 5 7'
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.
>>> import datetime
>>> d = datetime.datetime.now()
>>> d.strftime('X%d/X%m/%Y').replace('X0','X').replace('X','')
'5/5/2011'
.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
cukup terlambat ke pesta tetapi %-d
bekerja pada saya.
datetime.now().strftime('%B %-d, %Y')
menghasilkan sesuatu seperti "5 November 2014"
Bersulang :)
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
from django.template.defaultfilters import date as django_date_filter
print django_date_filter(mydate, 'P, D M j, Y')
import django.conf
django.conf.settings.configure()
Lihatlah di -
bawah ini:
>>> from datetime import datetime
>>> datetime.now().strftime('%d-%b-%Y')
>>> '08-Oct-2011'
>>> datetime.now().strftime('%-d-%b-%Y')
>>> '8-Oct-2011'
>>> today = datetime.date.today()
>>> today.strftime('%d-%b-%Y')
>>> print(today)
cukup gunakan replace
seperti ini:
(datetime.date.now()).strftime("%Y/%m/%d").replace("/0", "/")
itu akan menampilkan:
'2017/7/21'
Untuk %d
Anda dapat mengonversi ke integer menggunakan int()
maka secara otomatis akan menghapus 0 memimpin dan menjadi integer. Anda kemudian dapat mengonversi kembali ke string menggunakan str()
.
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.
e = datetime.date(2014, 1, 6)
"{date:%A} {date.day} {date:%B}{date.year}".format(date=e)
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; coba man 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 seperti t.year
dan t.month
dan t.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 .
Berdasarkan metode Alex, ini akan bekerja untuk kasus awal-string-dan setelah-spasi:
re.sub('^0|(?<= )0', '', "01 January 2000 08:00am")
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").
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
import datetime
now = datetime.datetime.now()
print now.strftime("%b %_d")
ValueError: '_' is a bad directive in format '%a %b %_d %H:%M:%S %Y'
menggunakan python 3.5