【问题标题】:strptime defaulting to 1900strptime 默认为 1900
【发布时间】:2013-08-24 12:50:13
【问题描述】:
from datetime import datetime

datetime.strptime('%b%d  %I:%M%p', 'AUG21  3:26PM')

results with 
1900-08-21 15:26:00

我怎样才能以pythonic方式编写,以便在没有年份时,将当前年份作为默认年份(2013)?

我检查了 strftime 函数没有更改默认值的选项。也许其他时间库可以做?

谢谢

【问题讨论】:

  • 如果您不反对第三方库,您可以使用dateutil 模块。 parser 方法采用默认日期,用于从解析的字符串中填充缺失的信息。

标签: python datetime strftime


【解决方案1】:

您可以找出今天的日期来替换年份以进行动态替换。

datetime.strptime('%b%d  %I:%M%p', 'AUG21  3:26PM').replace(year=datetime.today().year)

【讨论】:

    【解决方案2】:

    按照您已经在做的那样解析日期,然后

    date= date.replace(2013)
    

    这是您正在使用的模块的最简单解决方案之一。

    好好考虑一下,明年 2 月 29 日你可能会遇到问题。

    input= 'Aug21  3:26PM'
    output= datetime.datetime.strptime('2013 '+ input ,'%Y %b%d  %I:%M%p')
    

    【讨论】:

    • 请记住,日期时间对象是不可变的,因此这里的替换会返回一个新的日期时间对象。
    • @cge 谢谢你。我在文中做了一点小小的改动。
    • 我无法针对特定情况进行破解。它是一个接收数百个日期时间和格式的函数,并试图匹配它们..
    • 然后修改datetime源码并重新编译。这是一个老问题,我不知道任何其他解决方案。我能想到的唯一替代方案(因为修改库模块肯定太激烈了,我不敢相信我只是推荐它:-))是检查格式(以及日期)是否带有一年。如果没有,那么你“破解”它们。否则,你让它们保持原样。
    • @MarioRossi:一个不错的选择是继承 datetime 类,并为调用父 strptime 的 strptime 编写一个包装器,然后在必要时应用默认值。
    猜你喜欢
    • 2015-03-02
    • 2013-10-11
    • 2013-12-30
    • 1970-01-01
    • 2022-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多