【问题标题】:Python strptime parsing year without century: assume prior to this year?Python strptime 解析没有世纪的年份:假设在今年之前?
【发布时间】:2015-10-29 06:14:20
【问题描述】:

我正在使用datetime.strptime 在 Python 2.7 中解析一些日期时间字符串。我想假设日期早于现在。

但是strptime的%y operator默认不这样做:

d = '10/12/68'
n = datetime.strptime(d, '%d/%m/%y')
print n
2068-12-10 00:00:00

有什么方法可以让 Python 假设 681968,因为它是常用的?

或者我应该只解析字符串并根据需要手动插入1920

【问题讨论】:

    标签: python datetime


    【解决方案1】:

    如果您的输入是本地时区:

    from datetime import date
    
    then = datetime.strptime('10/12/68', '%d/%m/%y').date()
    if date.today() <= then: # *then* must be in the past
        then = then.replace(year=then.year - 100)
    

    它应该可以正常工作到 2100 年(不包括在内)。在此处查看more details on arithmetic with calendar years

    【讨论】:

      【解决方案2】:

      事后很容易修复:

      from datetime import datetime, timedelta
      dt = datetime.strptime(...)
      if dt > datetime.now():
          dt -= timedelta(years=100)
      

      【讨论】:

      • 谢谢! timedelta 不接受 years 参数,所以我使用了 dt -= relativedelta(years=100)。所需的导入是from dateutil.relativedelta import relativedelta
      • 或:timedelta(days=365),尽管由于闰年这可能不那么安全..
      • dt = dt.replace(year=dt.year-100)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 2018-03-03
      • 1970-01-01
      • 2021-12-09
      • 1970-01-01
      • 2021-04-14
      相关资源
      最近更新 更多