Итак, этот вопрос - лучший способ справиться с таким вводом в python. Вот пример ввода даты 2018-12-31 23:59:59.999999. Часть миллисекунды может быть или не быть частью ввода.
В настоящее время я использую этот код, чтобы преобразовать это в datetime
input_ts = datetime.datetime.strptime(input_str, '%Y-%m-%dT%H:%M:%S.%f')
Но проблема в этом случае заключается в том, что он выдаст исключение, если входная строка не содержит части миллисекунд, то есть 2018-12-31 23:59:59
В Java я мог бы решить эту проблему двумя способами. (это псевдообъяснение, без учета мелких проверок границ)
(предпочтительный подход). Проверьте длину входной строки. если его значение меньше 19, то миллисекунды отсутствуют. Добавьте к нему .000000.
(не рекомендуется). Пусть основной код проанализирует строку, если он вызывает исключение, затем проанализирует ее с новым форматом времени, то есть %Y-%m-%dT%H:%M:%S
Третий подход - просто убрать миллисекунды.
Я не уверен, есть ли в python что-нибудь встроенное для обработки таких ситуаций. Какие-либо предложения?
Я могу. Но поскольку я все еще изучаю Python и, основываясь на моем прошлом опыте, у python всегда есть супер-краткий способ добиться цели. Вот почему я спрашиваю






Вы можете использовать библиотеку python-dateutil, она достаточно умен, чтобы анализировать большинство основных форматов даты.
import dateutil.parser
dateutil.parser.parse('2018-12-31 23:59:59.999999')
dateutil.parser.parse('2018-12-31 23:59:59')
Если вы не хотите устанавливать какие-либо внешние библиотеки, вы можете перебирать список различных форматов, как предлагается в этом ответе.
from datetime import datetime # import datetime class from datetime package
dt = datetime.now() # get current time
dt1 = dt1.strftime('%Y-%m-%d %H:%M:%S') # converting time to string
dt3 = dt2.strptime('2018/5/20','%Y/%m/%d') # converting a string to specified time
Хотя это может ответить на вопрос авторов, в нем отсутствуют некоторые поясняющие слова и / или ссылки на документацию. Фрагменты исходного кода не очень полезны без некоторых фраз. Вы также можете найти как написать хороший ответ очень полезным. Пожалуйста, отредактируйте свой ответ.
Почему вы не делаете ни №1, ни №2?