Python的strftime – date没有领先0?
当使用Python strftime
,是否有办法删除date的前10位,如果它是在10日之前,即。 所以01
是1
? 找不到%
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.year
和t.month
和t.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'