Python strftime-日期,不带前导0?

Python strftime-日期,不带前导0?,python,padding,strftime,Python,Padding,Strftime,当使用Pythonstrftime时,如果日期的前0在第10个之前,是否有办法删除它,即so01是1?找不到那东西的%吗 谢谢 一些平台可能支持宽度和精度规格介于%和字母之间(例如“d”表示月日),但这绝对是一种不可移植的解决方案(例如,在我的Mac上不起作用;-)。也许您可以在strftime之后使用字符串替换(或者RE,对于真正讨厌的格式)来解决这个问题?e、 g: >>> y (2009, 5, 7, 17, 17, 17, 3, 127, 1) >>>

当使用Python
strftime
时,如果日期的前0在第10个之前,是否有办法删除它,即so
01
1
?找不到那东西的
%


谢谢

一些平台可能支持宽度和精度规格介于
%
和字母之间(例如“d”表示月日),但这绝对是一种不可移植的解决方案(例如,在我的Mac上不起作用;-)。也许您可以在
strftime
之后使用字符串替换(或者RE,对于真正讨厌的格式)来解决这个问题?e、 g:

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

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

我将尝试使用一个新样式的
datetime
对象,它具有
t.year
t.month
t.day
等属性,并将这些属性设置为
%
操作符的正常、高性能格式,该操作符支持前导零的控制。有关详细信息,请参阅。更好的方法是,如果您的Python有
“”.format()
操作符,并且更加现代,则使用它;它还有很多数字格式选项。参见:。

是GNU C库中的
strftime()
支持的修饰符文档。(正如人们之前所说,它可能不便于携带。)您可能感兴趣的是:

  • %e
    而不是
    %d
    将用空格替换月日的前导零

它在我的Python(Linux)上工作。我不知道它是否适用于您的文件。

我发现Django模板日期格式过滤器既快捷又简单。它去掉前导零。如果您不介意导入Django模块,请查看它


实际上我也遇到了同样的问题,我意识到,如果在
%
和字母之间添加一个连字符,就可以删除前导零

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


这只适用于Unix(Linux、OSX),而不适用于Windows(包括Cygwin)。在Windows上,您可以使用
#
,例如
%Y/%m/%d
对于
%d
,您可以使用
int()
将其转换为整数,然后它将自动删除前导0并变为整数。然后,您可以使用
str()

将其转换回字符串。请查看下面的
-
章节:

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

自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开始,这可以表示为:


根据Alex的方法,这将适用于字符串开头和空格后的情况:

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

re.sub(“^0”|)(?去派对已经很晚了,但是
%-d
对我来说很有效

datetime.now()

干杯:)

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


参考:

旧问题,但%l(小写l)在strftime中对我有效:但这可能不适用于所有人,因为我发现Python文档中没有列出它

只需像这样使用
替换

import datetime
now = datetime.datetime.now()
print now.strftime("%b %_d")
(datetime.date.now()).strftime(“%Y/%m/%d”)。替换(“/0”、““/”)

它将输出:

'2017/7/21'
例如,使用“%-d”即使在同一操作系统的不同版本之间也不可移植。 更好的解决方案是单独提取日期组件,并在特定于日期的格式化运算符和每个组件的日期属性访问之间进行选择

e = datetime.date(2014, 1, 6)
"{date:%A} {date.day} {date:%B}{date.year}".format(date=e)
Python 3.6+:

from datetime导入日期
今天=日期。今天()
text=“今天是”+Today.strftime(f”%A%B{Today.day},%Y)

我迟到了,但简单的列表切片就可以了

today_date = date.today().strftime('%d %b %Y')
if today_date[0] == '0':
    today_date = today_date[1:]


%e在Windows w/Python 2.6上对我来说失败了。我猜它是*nix特定的。太糟糕了:(这是最干净、最通用的解决方案——至少在*nix系统上是这样。这在OS X上是有效的。就像
%-d
,这在OS X 10.8.5和Python2.7.2中是有效的,但在Windows 7 Pro 64位和Python2.7.3中不是有效的。这在Windows 7 SP1和Python3.5.1中是有效的。这引入了一个额外的空格,而不是前导零,如果你想知道的话如果要精确匹配,则可能不是这样。>>>one=datetime.datetime(2019,5,1,23,28,48,175214)>>>one.strftime(“%b%e%H”)“may 123”>>eleven=datetime.datetime(2019,5,11,23,28,48,175214)>>eleven.strftime(“%b%e%H”)“may 11 23”甚至对我不起作用,给出了一个值错误(windows,python 2.6)它在OS X上对我有效,但我使用的是Python.org上的Python 2.7.2。@moose我问了一个问题:-)下面是答案->我得到
ValueError:“-”是一个错误的指令,格式为“%b%-d,%Y”
.OSX,Python2.7。
%#d
在Windows上也会这样做注意,如果你和我一样,并且你没有在django中构建你的应用程序,你需要告诉django你不需要配置它:
import django.conf
这在2000年1月1日起作用,但不起作用。做
.replace('X0','X')。replace('X','')
?只要做
.replace('X0','')
就行了。@MarcoBonelli:试试你对字符串“X12/X12/14”的建议吧你会看到的。这是黑客,但它是一个pythonic黑客。哇!喜欢这个,因为它可以帮助我替换约会中的一些东西。@guneysus你是什么意思?它应该会导致“2000年1月1日”@用户上面的代码检查0之前的空格,如果是“2000年1月1日”不存在。@alex请删除此答案,正如您可能知道的,这远远不是正确答案。非常好!不幸的是,如果您想使用文本表示法,如'2017/7/21'
e = datetime.date(2014, 1, 6)
"{date:%A} {date.day} {date:%B}{date.year}".format(date=e)
today_date = date.today().strftime('%d %b %Y')
if today_date[0] == '0':
    today_date = today_date[1:]