356

使用 Pythonstrftime时,如果日期的第一个 0 在第 10 个之前,有没有办法删除它,即。也是011?找不到%东西吗?

谢谢!

4

19 回答 19

702

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

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

这仅适用于 Unix(Linux、OS X),不适用于 Windows(包括 Cygwin)。在 Windows 上,您将使用#,例如%Y/%#m/%#d.

于 2010-01-15T16:38:41.417 回答
208

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 开始,这可以表示为内联格式化字符串

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'
于 2013-04-19T04:48:02.993 回答
45

根据http://docs.python.org/library/time.html ,某些平台可能支持字母之间的宽度和精度规范%(例如“d”表示月份)——但它绝对是不可移植的解决方案(例如在我的 Mac 上不起作用;-)。也许您可以在 之后使用字符串替换(或 RE,对于非常讨厌的格式)来解决这个问题?例如:strftime

>>> 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'
于 2009-05-25T00:22:43.277 回答
36

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

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

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

于 2009-05-25T18:13:36.383 回答
36
>>> import datetime
>>> d = datetime.datetime.now()
>>> d.strftime('X%d/X%m/%Y').replace('X0','X').replace('X','')
'5/5/2011'
于 2011-05-05T15:46:24.267 回答
24

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

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

于 2015-07-31T14:12:53.607 回答
21

参加聚会很晚,但%-d对我有用。

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

干杯:)

于 2014-11-25T11:08:03.003 回答
10

我发现 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')    
于 2009-09-15T16:31:23.653 回答
9

看看-下面:

>>> 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)
于 2011-10-08T18:15:59.780 回答
8

像这样简单地使用replace

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

它将输出:

'2017/7/21'
于 2017-07-21T16:51:40.200 回答
5

因为%d您可以使用 then 转换为整数,int()它会自动删除前导 0 并变为整数。然后,您可以使用str().

于 2010-07-19T23:33:10.453 回答
3

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

e = datetime.date(2014, 1, 6)
"{date:%A} {date.day} {date:%B}{date.year}".format(date=e)
于 2018-04-18T00:52:54.043 回答
2

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

我会尝试使用新样式的datetime对象来代替,它具有t.yeart.monthand之类的属性t.day,并通过运算符的正常、高性能格式设置这些对象%,它支持对前导零的控制。有关详细信息,请参阅http://docs.python.org/library/datetime.html。更好的是,"".format()如果你的 Python 有它并且更现代,请使用该运算符;它也有很多数字格式选项。请参阅:http ://docs.python.org/library/string.html#string-formatting 。

于 2009-05-25T00:23:21.323 回答
2

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

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

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

于 2014-11-17T18:19:31.760 回答
2

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

于 2016-07-29T15:29:35.107 回答
2
import datetime
now = datetime.datetime.now()
print now.strftime("%b %_d")
于 2017-02-01T22:53:34.493 回答
2

如果我们只想获取不带前导零的日期,我们可以

d = date.today()
day = int(d.strftime("%d"))
于 2022-01-02T17:04:30.893 回答
1

Python 3.6+:

from datetime import date
today = date.today()
text = "Today it is " + today.strftime(f"%A %B {today.day}, %Y")
于 2020-12-03T05:36:03.467 回答
0

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

today_date = date.today().strftime('%d %b %Y')
if today_date[0] == '0':
    today_date = today_date[1:]
于 2020-12-07T04:53:52.110 回答