datetime.datetime.strptime, по-видимому, вызывает сопоставление директив независимо от фактической используемой длины строки.Используя более короткие строки, директивы заставят объект datetime.datetime использовать «что-то» в строке независимо от фактических директив.
Это правильное поведение с достаточным количеством ввода для заполнения директив
>>> datetime.datetime.strptime('20180822163014', '%Y%m%d%H%M%S')
datetime.datetime(2018, 8, 22, 16, 30, 14)
Эта директива, однако, изменит предыдущий синтаксический анализ
>>> datetime.datetime.strptime('20180822163014', '%Y%m%d%H%M%S%f')
datetime.datetime(2018, 8, 22, 16, 30, 1, 400000)
Есть ли способ отбросить крайние правые директивы, если входная строка недостаточно длинна вместо каннибализации левых?
Iпомечены C и ubuntu, потому что в документации написано
"Полный набор поддерживаемых кодов формата варьируется в зависимости от платформы, поскольку Python вызывает функцию strftime () библиотеки C для платформы, и вариации платформы являются общими.полный набор кодов форматов, поддерживаемых на вашей платформе, см. в документации strftime (3). "
РЕДАКТИРОВАТЬ:
man ctime
показывает следующую структуру в качестве вывода.Интересно, что точность в микросекундах (% f) не поддерживается.
struct tm {
int tm_sec; /* Seconds (0-60) */
int tm_min; /* Minutes (0-59) */
int tm_hour; /* Hours (0-23) */
int tm_mday; /* Day of the month (1-31) */
int tm_mon; /* Month (0-11) */
int tm_year; /* Year - 1900 */
int tm_wday; /* Day of the week (0-6, Sunday = 0) */
int tm_yday; /* Day in the year (0-365, 1 Jan = 0) */
int tm_isdst; /* Daylight saving time */
};