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

问题描述 投票:0回答:22

当使用Python

strftime
时,如果日期在10号之前,有没有办法删除日期的前0,即。那么
01
就是
1
?找不到
%
的东西吗?

谢谢!

python padding strftime
22个回答
789
投票

实际上我也遇到了同样的问题,我意识到,如果在

%
和字母之间添加连字符,就可以删除前导零。

例如

%Y/%-m/%-d

这只适用于 Unix(Linux、OS X),不适用于 Windows(包括 Cygwin)。在 Windows 上,您可以使用

#
,例如
%Y/%#m/%#d


213
投票

自 python2.6 以来,随着

format
方法的出现,我们可以做到这一点:

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

46
投票

根据

http://docs.python.org/library/time.html
,某些平台可能支持 % 和字母之间的宽度和精度规范(例如表示月份中的某一天的“d”)——但是这绝对是一个不可移植的解决方案(例如,在我的 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'

40
投票

这里是GNU C库中

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

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

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


37
投票
>>> import datetime
>>> d = datetime.datetime.now()
>>> d.strftime('X%d/X%m/%Y').replace('X0','X').replace('X','')
'5/5/2011'

26
投票

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

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


24
投票

参加聚会已经很晚了,但

%-d
对我来说很有效。

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

干杯:)


11
投票

看看下面的

-

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

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

8
投票

只需像这样使用

replace

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

它将输出:

'2017/7/21'

5
投票

对于

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


4
投票

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

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

3
投票

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

d = date.today()
day = int(d.strftime("%d"))

2
投票

因为Python实际上只是在您的平台上调用C语言

strftime(3)
函数,所以可能有一些格式字符可以用来控制前导零;尝试
man strftime
并看看。但是,当然,结果是不可移植的,Python 手册会提醒你。 :-)

我会尝试使用新样式的

datetime
对象,它具有
t.year
t.month
t.day
等属性,并将它们通过
%
运算符的正常、高性能格式化,这确实支持前导零的控制。有关详细信息,请参阅 http://docs.python.org/library/datetime.html。更好的是,如果您的 Python 有
"".format()
运算符,那么使用它会更现代;它还有很多数字格式选项。请参阅:http://docs.python.org/library/string.html#string-formatting


2
投票

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

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

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


2
投票

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


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

1
投票

Python 3.6+:

from datetime import date
today = date.today()
text = "Today it is " + today.strftime(f"%A %B {today.day}, %Y")

0
投票

我迟到了,但是简单的列表切片就可以完成工作

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

0
投票

标准库对于大多数情况来说已经足够好了,但对于真正详细的日期操作,您应该始终寻找一些专门的第三方库。

使用箭头

>>> import arrow
>>> arrow.utcnow().format('dddd, D. M. YYYY')
'Friday, 6. 5. 2022'

查看完整的支持代币列表


0
投票

有点棘手,但对我有用

例如。从

2021-02-01T00:00:00.000Z
2021-02-1

from datetime import datetime

dateObj = datetime.strptime('2021-02-01T00:00:00.000Z','%Y-%m-%dT%H:%M:%S.%fZ')
dateObj.strftime('%Y-%m-{}').format(dateObj.day)


0
投票

通过转换为“int”来删除日和月的“0”前缀的业余方法

dt = "08/01/2023"
dtArr = d.split("/")
print(str(int(x[0]))+'/'+str(int(x[1]))+'/'+str(int(x[2])))
© www.soinside.com 2019 - 2024. All rights reserved.