【发布时间】:2010-10-28 15:25:41
【问题描述】:
当使用 Python strftime 时,如果日期的第一个 0 在 10 号之前,有没有办法删除它,即。所以01 是1?找不到%thingy 吗?
谢谢!
【问题讨论】:
当使用 Python strftime 时,如果日期的第一个 0 在 10 号之前,有没有办法删除它,即。所以01 是1?找不到%thingy 吗?
谢谢!
【问题讨论】:
其实我也遇到了同样的问题,我意识到,如果你在%和字母之间添加一个连字符,你可以去掉前导零。
例如%Y/%-m/%-d。
这仅适用于 Unix(Linux、OS X),不适用于 Windows(包括 Cygwin)。在 Windows 上,您将使用 #,例如%Y/%#m/%#d.
【讨论】:
ValueError: '-' is a bad directive in format '%b %-d, %Y'。 OSX,Python 2.7。
%#d 在 Windows 上也会这样做
随着 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开始,这可以表示为inline formatted 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'
【讨论】:
time.strftime('%A %B %d, %Y') 这样的文本表示,它不能单独工作,它会产生(现在,在英语语言环境中)Tuesday October 07, 2014。
__format__ 钩子,它允许您编写类似的东西。
'{dt.hour}' 使用 24 小时制 :(。使用第二个选项仍然会让您回到在 Windows 上使用 '{%#I}' 和在 Unix 上使用 '{%-I}'。
根据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'
【讨论】:
Here 是 GNU C 库中strftime() 支持的修饰符的文档。 (就像人们之前所说的,它可能不便携。)您可能感兴趣的是:
%e 而不是 %d 将用空格替换月份中的前导零它适用于我的 Python(在 Linux 上)。我不知道它是否对你有用。
【讨论】:
%-d above 一样,这适用于带有 Python 2.7.2 的 OS X 10.8.5,但不适用于带有 Python 2.7.3 的 64 位 Windows 7 Pro。
>>> import datetime
>>> d = datetime.datetime.now()
>>> d.strftime('X%d/X%m/%Y').replace('X0','X').replace('X','')
'5/5/2011'
【讨论】:
.replace('X0','X').replace('X','') 的意义何在?只需执行.replace('X0', '') 就可以了。
在 Windows 上,添加一个“#”,如 '%#m/%#d/%Y %#I:%M:%S %p'
【讨论】:
聚会迟到了,但%-d 为我工作。
datetime.now().strftime('%B %-d, %Y') 产生类似 "November 5, 2014"
干杯:)
【讨论】:
ValueError: Invalid format string 在我的 Windows 系统中。
- "仅适用于 Unix(Linux、OS X),不适用于 Windows(包括 Cygwin)。在 Windows 上,您将使用 #"
我发现 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')
【讨论】:
import django.confdjango.conf.settings.configure()
看看下面-:
>>> 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)
【讨论】:
像这样简单地使用replace:
(datetime.date.now()).strftime("%Y/%m/%d").replace("/0", "/")
它会输出:
'2017/7/21'
【讨论】:
对于%d,您可以使用int() 转换为整数,然后它会自动删除前导0 并变为整数。然后您可以使用str() 转换回字符串。
【讨论】:
例如,即使在同一操作系统的不同版本之间,使用“%-d”也是不可移植的。 更好的解决方案是单独提取日期组件,并在特定于日期的格式化运算符和每个组件的日期属性访问之间进行选择。
e = datetime.date(2014, 1, 6)
"{date:%A} {date.day} {date:%B}{date.year}".format(date=e)
【讨论】:
因为 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。
【讨论】:
根据 Alex 的方法,这将适用于字符串开头和后空格的情况:
re.sub('^0|(?<= )0', '', "01 January 2000 08:00am")
我比 .format 或 %-d 更喜欢它,因为它是跨平台的,让我可以继续使用 strftime(获取“十一月”和“星期一”之类的内容)。
【讨论】:
老问题,但 %l(小写 L)在 strftime 中对我有用:但这可能不适用于所有人,因为它没有在我找到的 Python 文档中列出
【讨论】:
import datetime
now = datetime.datetime.now()
print now.strftime("%b %_d")
【讨论】:
ValueError: '_' is a bad directive in format '%a %b %_d %H:%M:%S %Y' 使用 python 3.5
如果我们只想获取不带前导零的日期,我们可以
d = date.today()
day = int(d.strftime("%d"))
【讨论】:
Python 3.6+:
from datetime import date
today = date.today()
text = "Today it is " + 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:]
【讨论】: