2009-05-25 177 views

回答

-28

您可以使用left strip刪除前導零的

day = day.lstrip('0') 

>>> day = '01' 
>>> day.lstrip('0') 
'1' 
+109

-1這是什麼都與strftime的呢? – 2012-09-10 21:18:09

+10

`lstrip` /`strip`(或`strip`)將不能用於這樣的事情:`%y-%m-%d%I:%M%p` 可以使用'replace'('0' ,'')`或者正則表達式變體,但是這仍然不是解決方案,更多的是破解(imho) – Kasapo 2013-03-19 19:09:43

+3

它可以適用於「日」,但不適用於「小時」,如果您使用lstrip('0')。對於午夜 - 函數將截斷整個字符串''(因爲它將兩個零不只是第一個零),所以我相信int(日)或int(小時)是更好的選擇。 – 2014-06-26 10:25:06

32

一些平臺可以支持%和字母(如「D」爲月日),根據http://docs.python.org/library/time.html之間的寬度和精度規範 - 但它絕對是一種非便攜式解決方案(例如,不適用於我的Mac ;-)。也許你可以在strftime之後使用一個字符串替換(或RE,用於非常討厭的格式)以解決這個問題?例如: -

>>> 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' 
+3

這不適用於2000年1月1日:) – guneysus 2013-11-02 14:18:57

+0

@guneysus你是什麼意思?它應該導致'2000年1月1日' – User 2013-11-13 05:55:14

+3

@User上面的代碼檢查0之前的空格,在「2000年1月1日」不存在的情況下。 – 2013-12-01 00:28:47

1

因爲Python真的只是調用C語言平臺上strftime(3)功能,它可能是有格式的字符,你可以用它來控制前導零;試試man strftime並看看。但是,當然,結果將不可移植,因爲Python手冊會提醒您。 :-)

我會嘗試用一種新的風格datetime對象,而不是,它有一個像t.yeart.montht.day屬性,並把那些通過%運營商的正常的,高功率的格式,它不支持的控制前導零。詳情請參閱http://docs.python.org/library/datetime.html。更好的是,如果你的Python擁有它並且更加現代,那麼使用"".format()運算符;它也有很多數字格式選項。請參閱:http://docs.python.org/library/string.html#string-formatting

16

Here是GNU C庫中strftime()支持的修飾符的文檔。 (喜歡的人面前說,它可能無法移植。)您感興趣的可能是:

  • %e代替%d將取代一個月的天前導零用空格

它適用於我的Python(在Linux上)。我不知道它是否會對你的工作。

+3

%w在Python 2.6上對我來說失敗了。我猜這是* nix特定的。太糟糕了:( – rocketmonkeys 2010-11-30 14:27:46

+1

這是至少在* nix系統上最乾淨,最一般的解決方案---這適用於OS X. – BFTM 2013-09-10 05:20:24

+0

就像'%-d` [above](http:// stackoverflow。 com/a/2073189/1447415),它適用於Python 2.7.2的OS X 10.8.5,但不適用於Windows 7 Pro,Python 2.7.3的64位。 – Johan 2013-11-08 10:59:52

9

我發現Django模板日期格式過濾器快速簡單。它去掉了前導零。如果你不介意導入Django模塊,請檢查它。

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')  
+0

注意,如果你像我一樣,不要在django中構建你的應用程序,你需要告訴django你不需要配置它:`import django.conf`` django.conf.settings.configure()` – 2012-01-29 01:21:00

387

其實我有同樣的問題,我意識到,如果添加%和字母之間的連字符,你可以刪除前導零。例如%Y/%-m/%-d

這隻適用於Unix(Linux,OS X),而不是Windows(包括Cygwin)。在Windows上,您可以使用#,例如%Y/%#m/%#d

+0

只適用於Python 2.x – SilentGhost 2010-01-15 16:42:34

1

對於%d您可以使用int()轉換爲整數,然後它會自動刪除前導0併成爲整數。然後您可以使用str()轉換回字符串。

23
>>> import datetime 
>>> d = datetime.datetime.now() 
>>> d.strftime('X%d/X%m/%Y').replace('X0','X').replace('X','') 
'5/5/2011' 
3

-看看波紋管:

>>> 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) 
152

我們可以做這樣的事情與format方法的出現,因爲python2.6的:

>>> import datetime 
>>> '{dt.year}/{dt.month}/{dt.day}'.format(dt = datetime.datetime.now()) 
'2013/4/19' 

雖然也許以後原始問題的範圍,對於更有趣的格式,您可以執行以下操作:

>>> '{dt:%A} {dt:%B} {dt.day}, {dt.year}'.format(dt=datetime.datetime.now()) 
'Wednesday December 3, 2014' 

而作爲python3.6的,這可以表示爲inline formatted string

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' 
2

根據Alex的方法,這將同時爲啓動的串並後的空間情況下工作:

re.sub('^0|(?<=)0', '', "01 January 2000 08:00am") 

我比.format或%-d更好,因爲這是跨平臺的,並且允許我繼續使用strftime(以獲得像「November」和「Monday」之類的東西)。

10

晚了很晚,但%-d在我的工作結束。

datetime.now().strftime('%B %-d, %Y')產生類似「2014年11月5日」

歡呼:)

1

老問題,但%L(小寫的L)的strftime的工作對我來說:這可能不適合每一個人,不過,因爲它未在Python文檔I中列出發現

0
import datetime 
now = datetime.datetime.now() 
print now.strftime("%b %_d") 
0

只需使用replace這樣的:

(datetime.date.now()).strftime("%Y/%m/%d").replace("/0", "/")

將輸出:

'2017/7/21'