【问题标题】:Get rid of leading zeros for date strings in Python? [duplicate]摆脱 Python 中日期字符串的前导零? [复制]
【发布时间】:2011-01-19 13:42:11
【问题描述】:

有没有一种灵活的方法可以去除 Python 中日期字符串的前导零?

在下面的示例中,我希望得到 12/1/2009 作为回报,而不是 12/01/2009。我想我可以使用正则表达式。但对我来说,这似乎有点矫枉过正。有没有更好的解决方案?

>>> time.strftime('%m/%d/%Y',time.strptime('12/1/2009', '%m/%d/%Y'))
'12/01/2009'

另见

Python strftime - date without leading 0?

【问题讨论】:

  • 该脚本用于输出格式非常精美的 pdf,我认为前导零在视觉上并不吸引人。不完全是一个表演停止者,但我很想找到一种快速的方法来避免它们......

标签: python date leading-zero


【解决方案1】:

一个更简单易读的解决方案是自己格式化:

>>> d = datetime.datetime.now()
>>> "%d/%d/%d"%(d.month, d.day, d.year)
4/8/2012

【讨论】:

  • 我花了很长时间才找到这个特定问题的答案。我必须将我的日期传递给 date 类,它只接受 date(d,m,yyyy) 而不是 date(dd,mm,yyyy)
【解决方案2】:

@OP,做一点字符串操作并不需要太多。

>>> t=time.strftime('%m/%d/%Y',time.strptime('12/1/2009', '%m/%d/%Y'))
>>> '/'.join( map( str, map(int,t.split("/")) ) )
'12/1/2009'

【讨论】:

  • 现在有一个更好的 Python 3 解决方案:datetime.strptime("05/13/1999", "%m/%d/%Y").strftime("%m/%-d/%Y")
【解决方案3】:

我建议一个非常简单的正则表达式。这不像是性能关键,是吗?

搜索 \b0 并替换为空。

我。即:

import re
newstring = re.sub(r"\b0","",time.strftime('%m/%d/%Y',time.strptime('12/1/2009', '%m/%d/%Y')))

【讨论】:

  • 这几乎就是我所拥有的,但正如我在最初的帖子中所说,我只是认为将 re 用于如此微不足道的事情有点过头了......
  • 嗯,你可以split 字符串,lstrip 零,然后重新join 字符串,但这可能更难阅读。
  • 这就是我最终得到的结果,在我看来,它产生了最干净的代码。尽管如此,我仍然感到震惊,这是如此不平凡!
【解决方案4】:
>>> time.strftime('%-m/%-d/%Y',time.strptime('8/1/2009', '%m/%d/%Y'))
'8/1/2009'

但是,我怀疑这取决于系统的 strftime() 实现,并且可能无法完全移植到所有平台,如果这对您很重要的话。

【讨论】:

  • 是的,它确实取决于系统的 strftime。例如不适用于 Python2.6.1+WinXP
猜你喜欢
  • 2019-01-17
  • 2017-05-28
  • 1970-01-01
  • 1970-01-01
  • 2017-06-14
  • 2011-04-22
  • 1970-01-01
  • 2014-03-24
  • 1970-01-01
相关资源
最近更新 更多