Câu trả lời:
Trên thực tế tôi đã có cùng một vấn đề và tôi nhận ra rằng, nếu bạn thêm một dấu gạch nối giữa %
và chữ cái, bạn có thể loại bỏ số 0 đứng đầu.
Ví dụ %Y/%-m/%-d
.
Điều này chỉ hoạt động trên Unix (Linux, OS X), không phải Windows (bao gồm cả Cygwin). Trên Windows, bạn sẽ sử dụng #
, vd %Y/%#m/%#d
.
ValueError: '-' is a bad directive in format '%b %-d, %Y'
. OSX, Python 2.7.
%#d
sẽ làm tương tự trên Windows
Chúng ta có thể thực hiện loại điều này với sự ra đời của format
phương thức kể từ python2.6:
>>> import datetime
>>> '{dt.year}/{dt.month}/{dt.day}'.format(dt = datetime.datetime.now())
'2013/4/19'
Mặc dù có lẽ vượt quá phạm vi của câu hỏi ban đầu, đối với các định dạng thú vị hơn, bạn có thể thực hiện các công cụ như:
>>> '{dt:%A} {dt:%B} {dt.day}, {dt.year}'.format(dt=datetime.datetime.now())
'Wednesday December 3, 2014'
Và kể từ python3.6, điều này có thể được biểu thị dưới dạng một chuỗi được định dạng nội tuyến :
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')
, điều này mang lại (bây giờ, trên ngôn ngữ tiếng Anh) Tuesday October 07, 2014
.
__format__
hook rất thú vị cho phép bạn viết những thứ như thế.
'{dt.hour}'
sử dụng đồng hồ 24 giờ :(. Sử dụng tùy chọn thứ hai vẫn đưa bạn quay lại sử dụng '{%#I}'
trên Windows và '{%-I}'
trên Unix.
Một số nền tảng có thể hỗ trợ thông số kỹ thuật về độ rộng và độ chính xác giữa %
và chữ cái (chẳng hạn như 'd' cho ngày trong tháng), theo http://docs.python.org/l Library / time.html - nhưng chắc chắn là không thể di động giải pháp (ví dụ: không hoạt động trên máy Mac của tôi ;-). Có lẽ bạn có thể sử dụng một chuỗi thay thế (hoặc RE, cho định dạng thực sự khó chịu) sau khi strftime
khắc phục điều đó? ví dụ:
>>> 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'
Dưới đây là tài liệu về các công cụ sửa đổi được hỗ trợ strftime()
trong thư viện GNU C. (Giống như mọi người đã nói trước đây, nó có thể không di động.) Điều bạn quan tâm có thể là:
%e
thay vì %d
sẽ thay thế số 0 đứng đầu trong ngày bằng một khoảng trắngNó hoạt động trên Python của tôi (trên Linux). Tôi không biết nếu nó sẽ làm việc trên của bạn.
>>> 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','')
? Chỉ cần làm .replace('X0', '')
và nó sẽ tốt.
Trên Windows, thêm '#', như trong '% # m /% # d /% Y% # I:% M:% S% p'
Để tham khảo: https://msdn.microsoft.com/en-us/l Library / giả06s4ak.aspx
đến bữa tiệc khá muộn nhưng %-d
kết thúc tốt đẹp
datetime.now().strftime('%B %-d, %Y')
sản xuất một cái gì đó như "ngày 5 tháng 11 năm 2014"
chúc mừng :)
ValueError: Invalid format string
trong hệ thống Windows của tôi.
Tôi thấy bộ lọc định dạng ngày mẫu Django rất nhanh chóng và dễ dàng. Nó loại bỏ các số không hàng đầu. Nếu bạn không phiền khi nhập mô-đun Django, hãy kiểm tra nó.
http://docs.djangoproject.com/en/dev/ref/temsheet/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()
Hãy nhìn vào -
dưới đây:
>>> 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)
Để %d
bạn có thể chuyển đổi thành số nguyên bằng cách int()
đó, nó sẽ tự động xóa số 0 đứng đầu và trở thành số nguyên. Sau đó, bạn có thể chuyển đổi trở lại chuỗi bằng cách sử dụng str()
.
chỉ cần sử dụng replace
như thế này:
(datetime.date.now()).strftime("%Y/%m/%d").replace("/0", "/")
nó sẽ xuất ra:
'2017/7/21'
sử dụng, ví dụ: "% -d" không khả dụng ngay cả giữa các phiên bản khác nhau của cùng một hệ điều hành. Một giải pháp tốt hơn sẽ là trích xuất từng thành phần ngày và chọn giữa các toán tử định dạng cụ thể ngày và truy cập thuộc tính ngày cho từng thành phần.
e = datetime.date(2014, 1, 6)
"{date:%A} {date.day} {date:%B}{date.year}".format(date=e)
Vì Python thực sự chỉ gọi strftime(3)
hàm ngôn ngữ C trên nền tảng của bạn, nên có thể có các ký tự định dạng bạn có thể sử dụng để kiểm soát số 0 đứng đầu; Hãy thử man strftime
và xem. Nhưng, tất nhiên, kết quả sẽ không khả chuyển, vì hướng dẫn Python sẽ nhắc nhở bạn. :-)
Tôi sẽ cố gắng sử dụng một phong cách mới datetime
đối tượng thay vào đó, trong đó có các thuộc tính như t.year
và t.month
và t.day
, và đưa những người thông qua việc bình thường, cao-powered định dạng của %
nhà điều hành, mà không kiểm soát hỗ trợ hàng đầu zero. Xem http://docs.python.org/l Library / datetime.html để biết chi tiết. Tốt hơn nữa, hãy sử dụng "".format()
toán tử nếu Python của bạn có nó và thậm chí còn hiện đại hơn; nó có rất nhiều tùy chọn định dạng cho số. Xem: http://docs.python.org/l Library / chuỗi.html # String-format .
Dựa trên phương pháp của Alex, cách này sẽ hoạt động cho cả trường hợp bắt đầu chuỗi và sau khoảng trắng:
re.sub('^0|(?<= )0', '', "01 January 2000 08:00am")
Tôi thích điều này tốt hơn .format hoặc% -d vì đây là nền tảng chéo và cho phép tôi tiếp tục sử dụng strftime (để có được những thứ như "tháng 11" và "thứ hai").
Câu hỏi cũ, nhưng% l (chữ thường L) hoạt động cho tôi trong các lần thoát: mặc dù điều này có thể không hiệu quả với tất cả mọi người, vì nó không được liệt kê trong tài liệu Python tôi tìm thấy
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'
sử dụng python 3.5