44

yymmdd我需要以 59到yy05(1959 到 2005)的格式解析代表 6 位日期的字符串。根据time模块文档,Python 的默认基准年是 1969 年,这对我不起作用。

是否有一种简单的方法可以覆盖枢轴年份,或者您可以提出其他解决方案吗?我正在使用 Python 2.7。谢谢!

4

6 回答 6

49

我会datetime正常使用并解析它。datetime.datetime.replace然后,如果它超过了您的上限日期,我会在该对象上使用- 将其调整回 100 年。:

import datetime
dd = datetime.datetime.strptime(date,'%y%m%d')
if dd.year > 2005:
   dd = dd.replace(year=dd.year-100)
于 2013-05-17T02:47:22.663 回答
6

使用您自己的枢轴将世纪添加到您的日期:

  year = int(date[0:2])
  if 59 <= year <= 99:
      date = '19' + date
  else
      date = '20' + date

然后使用strptime指令%Y而不是%y.

于 2013-05-17T02:45:02.210 回答
4
import datetime
date = '20-Apr-53'
dt = datetime.datetime.strptime( date, '%d-%b-%y' )
if dt.year > 2000:
    dt = dt.replace( year=dt.year-100 )
                     ^2053   ^1953
print dt.strftime( '%Y-%m-%d' )
于 2016-11-04T12:53:09.877 回答
4

您还可以执行以下操作:

today=datetime.datetime.today().strftime("%m/%d/%Y")
today=today[:-4]+today[-2:]
于 2017-04-26T05:47:16.180 回答
2

最近有一个类似的案例,最终得到了这个基本的计算和逻辑:

pivotyear = 1969
century = int(str(pivotyear)[:2]) * 100

def year_2to4_digit(year):
    return century + year if century + year > pivotyear else (century + 100) + year
于 2018-12-08T12:34:20.190 回答
0

如果您正在处理最近的日期以及非常旧的日期,并且想要使用当前日期作为基准(不仅仅是当前年份),请尝试以下代码:

import datetime
def parse_date(date_str):
    parsed = datetime.datetime.strptime(date_str,'%y%m%d')
    current_date = datetime.datetime.now()
    if parsed > current_date:
        parsed = parsed.replace(year=parsed.year - 100)
    return parsed
于 2020-09-17T22:18:01.227 回答