Как разобрать строковые даты с двухзначным годом?

Мне нужно разобрать строки, представляющие 6-значные даты в формате yymmdd где yy колеблется от 59 до 05 (с 1959 по 2005). Согласно time В модуле Docs Python по умолчанию установлен год выпуска 1969, который мне не подойдет.

Есть ли простой способ переопределить основной год или вы можете предложить другое решение? Я использую Python 2.7. Спасибо!

4 ответа

Решение

Я бы использовал 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)

Добавьте век к своей дате, используя свой собственный стержень:

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

а затем использовать strptime с %Y директива вместо %y,

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' )

Вы также можете выполнить следующее:

today=datetime.datetime.today().strftime("%m/%d/%Y")
today=today[:-4]+today[-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

Если вы имеете дело как с очень недавними, так и с очень старыми датами и хотите использовать текущую дату в качестве точки поворота (а не только текущий год), попробуйте этот код:

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
Другие вопросы по тегам