Python strftime - 没有前导 0 的日期?
- 2025-02-28 08:22:00
- admin 原创
- 67
问题描述:
使用 Python 时strftime
,如果日期在 10 号之前,是否有办法删除日期的第一个 0,即?01
找不到1
这个%
东西吗?
谢谢!
解决方案 1:
实际上我遇到了同样的问题,我意识到,如果在和字母之间添加连字符%
,就可以删除前导零。
例如%Y/%-m/%-d
:
>>> import datetime
>>> datetime.datetime(2023, 1, 2).strftime("%Y/%-m/%-d")
'2023/1/2'
这仅适用于 Unix(Linux、OS X),不适用于 Windows(包括 Cygwin)。在 Windows 上,您可以使用#
,例如%Y/%#m/%#d
。
解决方案 2:
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'
解决方案 3:
%
根据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'
解决方案 4:
这是 GNU C 库支持的修饰符的文档strftime()
。(就像人们之前说的,它可能不可移植。)您可能感兴趣的是:
%e
而不是%d
将用空格替换月份中的前导零
与Python 文档strftime() Format Codes
进行比较。%d
记录如下:
%d
:以零填充的十进制数表示月份中的日期。示例:01、02、…、31
但%e
没有文档记录。尽管没有文档记录,但对我来说它似乎不管怎样都有效(运行 Linux):
>>> import datetime
>>> datetime.datetime(2023, 1, 1).strftime("%e")
' 1'
我不知道它是否可以在你的操作系统上运行。
解决方案 5:
>>> import datetime
>>> d = datetime.datetime.now()
>>> d.strftime('X%d/X%m/%Y').replace('X0','X').replace('X','')
'5/5/2011'
解决方案 6:
在 Windows 上,添加“#”,如“%#m/%#d/%Y %#I:%M:%S %p”
参考:https://msdn.microsoft.com/en-us/library/fe06s4ak.aspx
解决方案 7:
参加聚会已经很晚了,但%-d
我可以继续工作。
datetime.now().strftime('%B %-d, %Y')
产生类似“2014 年 11 月 5 日”的结果
欢呼:)
解决方案 8:
请看-
下面的内容:
>>> 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)
解决方案 9:
我发现 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')
解决方案 10:
replace
只需像这样使用:
(datetime.date.now()).strftime("%Y/%m/%d").replace("/0", "/")
它将输出:
'2017/7/21'
解决方案 11:
因为%d
您可以使用 转换为整数,int()
所以它会自动删除前导 0 并变为整数。然后您可以使用 转换回字符串str()
。
解决方案 12:
例如,使用“%-d”即使是在同一个操作系统的不同版本之间也是不可移植的。更好的解决方案是分别提取日期组件,然后为每个组件选择日期特定的格式化运算符和日期属性访问。
e = datetime.date(2014, 1, 6)
"{date:%A} {date.day} {date:%B}{date.year}".format(date=e)
解决方案 13:
如果我们只想获取不带前导零的日期,我们可以
d = date.today()
day = int(d.strftime("%d"))
解决方案 14:
Python 3.6+:
from datetime import date
today = date.today()
text = "Today it is " + today.strftime(f"%A %B {today.day}, %Y")
解决方案 15:
因为 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 。
解决方案 16:
根据 Alex 的方法,这对于字符串开头和空格后的情况都有效:
re.sub('^0|(?<= )0', '', "01 January 2000 08:00am")
我比 .format 或 %-d 更喜欢它,因为它是跨平台的并且允许我继续使用 strftime(获取“十一月”和“星期一”之类的内容)。
解决方案 17:
老问题,但 %l (小写 L)在 strftime 中对我有用:但这可能并不适用于所有人,因为它没有在我发现的 Python 文档中列出
解决方案 18:
import datetime
now = datetime.datetime.now()
print now.strftime("%b %_d")
解决方案 19:
我迟到了,但简单的列表切片就可以完成工作
today_date = date.today().strftime('%d %b %Y')
if today_date[0] == '0':
today_date = today_date[1:]
解决方案 20:
标准库对于大多数情况来说已经足够好了,但对于真正详细的日期操作,您应该始终寻找一些专门的第三方库。
使用箭头:
>>> import arrow
>>> arrow.utcnow().format('dddd, D. M. YYYY')
'Friday, 6. 5. 2022'
查看受支持的令牌的完整列表。
解决方案 21:
有点棘手,但对我有用
例如从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)
解决方案 22:
一种业余方法,通过转换为“int”来删除日期和月份的“0”前缀
dt = "08/01/2023"
dtArr = d.split("/")
print(str(int(x[0]))+'/'+str(int(x[1]))+'/'+str(int(x[2])))
扫码咨询,免费领取项目管理大礼包!