摆脱 Python 中日期字符串的前导零? [复制]
Posted
技术标签:
【中文标题】摆脱 Python 中日期字符串的前导零? [复制]【英文标题】:Get rid of leading zeros for date strings in Python? [duplicate] 【发布时间】: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,我认为前导零在视觉上并不吸引人。不完全是一个表演停止者,但我很想找到一种快速的方法来避免它们...... 【参考方案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以上是关于摆脱 Python 中日期字符串的前导零? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
使用 to_char 函数解析为字符串时,如何从 Oracle 中的日期和月份值中删除前导零?
在 Apache Spark 中,我有一个数据框,其中有一列包含字符串(它的日期),但月份和日期中缺少前导零