Python的strftime – date没有领先0?

当使用Python strftime ,是否有办法删除date的前10位,如果它是在10日之前,即。 所以011 ? 找不到% s的东西?

谢谢!

您可以使用左侧的条来删除前导零

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

其实我有同样的问题,我意识到,如果你在%和字母之间添加一个连字符,你可以删除前导零。

例如%Y/%-m/%-d

这只适用于Unix(Linux,OS X),而不是Windows(包括Cygwin)。 在Windows上,您可以使用# ,例如%Y/%#m/%#d

自从python2.6开始,我们可以使用format方法来实现这种function:

 >>> 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开始,这可以表示为一个内联格式化的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' 

根据http://docs.python.org/library/time.html ,某些平台可能支持%和字母之间的宽度和精度规格(例如“d”表示date)便携式解决scheme(例如,不能在我的Mac上工作;-)。 也许你可以在strftime之后使用一个stringreplace(或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' 
 >>> import datetime >>> d = datetime.datetime.now() >>> d.strftime('X%d/X%m/%Y').replace('X0','X').replace('X','') '5/5/2011' 

这里是GNU C库中strftime()支持的修饰符的文档。 (就像之前人们所说的那样,它可能不是可移植的。)你感兴趣的可能是:

  • %e而不是%d将会在一个月中用空格replace前导零

它适用于我的Python(在Linux上)。 我不知道它是否会对你的工作。

在Windows上,添加一个'#',如'%#m /%#d /%Y%#I:%M:%S%p'

供参考: https : //msdn.microsoft.com/en-us/library/fe06s4ak.aspx

我发现Django模板date格式filter是快速和容易的。 它去掉了前导零。 如果你不介意导入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, DM j, Y') 

晚会比较晚,但%-d在我的结尾工作。

datetime.now().strftime('%B %-d, %Y')产生类似于“2014年11月5日”

欢呼:)

看看-波纹pipe:

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

基于Alex的方法,这将适用于string的开始和空格后的情况:

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

我喜欢这个比.format或%-d更好,因为这是跨平台的,并且允许我继续使用strftime(获取“11月”和“星期一”之类的东西)。

因为Python实际上只是在你的平台上调用C语言的strftime(3)函数,所以可能有格式字符可以用来控制前导零; 尝试man strftime并看看。 但是,当然,结果将不可移植,因为Python手册会提醒你。 🙂

我会尝试使用一个新的datetime对象,而不是像t.yeart.montht.day这样的属性,并通过%运算符的正常的,高性能的格式,这支持领先的控制零。 有关详细信息,请参阅http://docs.python.org/library/datetime.html 。 更好的方法是使用"".format()运算符,如果你的Python有它并且更加现代化的话。 它也有很多数字的格式选项。 请参阅: http : //docs.python.org/library/string.html#string-formatting 。

对于%d您可以使用int()将其转换为整数,然后它将自动删除前导0并成为整数。 然后可以使用str()将其转换回string。

老问题,但%l(小写L)在strftime中为我工作:这可能不适用于所有人,但是,因为它没有在Python文档中列出

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

只需使用replace这样的:

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

它会输出:

 '2017/7/21'