2009-05-25 41 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'