【问题标题】:Python date string formattingPython日期字符串格式化
【发布时间】:2013-09-10 16:45:47
【问题描述】:

我想从字符串格式的 python 日期中删除填充的零:

formatted_date = my_date.strftime("%m/%d/%Y") # outputs something like: 01/01/2013
date_out = formatted_date.replace(r'/0', r'/').replace(r'^0', r'') 

第二次替换不起作用——我得到了 2013 年 1 月 1 日。仅当它位于字符串开头的旁边时,如何匹配零?

【问题讨论】:

    标签: python string datetime


    【解决方案1】:

    .replace() not 采用正则表达式。您正在尝试替换文字文本^0。

    使用str.format() 创建不使用零填充的日期格式:

    '{0.month}/{0.day}/{0.year}'.format(my_date)
    

    并避免替换零。

    演示:

    >>> import datetime
    >>> today = datetime.date.today()
    >>> '{0.month}/{0.day}/{0.year}'.format(today)
    '9/10/2013'
    

    如果 Python 是使用 glibc 库编译的,那么您还可以在格式中使用破折号来抑制填充:

    my_date.strftime('%-m/%-d/%y')
    

    但这几乎没有那么便携。

    【讨论】:

    • +1。如果.strftime() 有允许省略前导零的格式字符串版本,那就太好了。看起来这是considered and rejected。
    • @StevenRumbalski:这取决于 C-API strftime() 调用。该标准没有任何这样的格式参数,C99 确实添加了 %e (Day of the month, space-padded (1-31)) 但没有对应的月份,没有任何填充。
    • @StevenRumbalski:啊,感谢那个链接,它给了我一个新技巧(仅限于 glibc 平台)。
    • 我不知道字符串中的索引可以访问对象属性。赞成回答问题并给我一个新的工具供以后使用。
    • @NathanTregillus:使用不同的格式?更好的是,使用像 Babel 这样的本地化库来为您处理日期格式。
    猜你喜欢
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多