Используя datetime.strptime, почему, когда я вводю год как «20», он отображает год как 2020, а не как 1990? - PullRequest
0 голосов
/ 06 марта 2020
>>> from datetime import datetime 
>>> datetime.strptime("6/3/20, 9:51:45", "%d/%m/%y, %H:%M:%S")                                                                                                                                                                             
datetime.datetime(2020, 3, 6, 9, 51, 45) 

Для приведенного выше кода кто-то может сказать мне, почему выходной год равен 2020, когда существует несколько возможных лет, например, 1920? На каком основании идет комплектация 2020 года?

1 Ответ

1 голос
/ 12 марта 2020

Реализация strptime() в Python (как для time.strptime(), так и datetime.datetime.strptime() соответствует стандарту Портативный интерфейс операционной системы (POSIX) , и именно этот стандарт определяет поведение здесь.

Стандарт POSIX для strptime() указывает, что происходит, когда вы используете %y для значения 2-di git:

%y
Год в столетии. Если для века не указано иное, значения в диапазоне [69,99] относятся к 1969–1999 годам включительно, а значения в диапазоне [00,68] относятся к годы с 2000 по 2068 включительно ; допускаются начальные нули, но не обязательны.

В вашем входе используется 20, который попадает в диапазон [00,68] включительно.

Если вы хотите увидеть это в исходном коде, вам нужно взглянуть на Lib/_strptime.py модуль :

if group_key == 'y':
    year = int(found_dict['y'])
    # Open Group specification for strptime() states that a %y
    #value in the range of [00, 68] is in the century 2000, while
    #[69,99] is in the century 1900
    if year <= 68:
        year += 2000
    else:
        year += 1900
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...