Дата анализа, которая может содержать или не содержать миллисекунды

Итак, этот вопрос - лучший способ справиться с таким вводом в 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 я мог бы решить эту проблему двумя способами. (это псевдообъяснение, без учета мелких проверок границ)

  1. (предпочтительный подход). Проверьте длину входной строки. если его значение меньше 19, то миллисекунды отсутствуют. Добавьте к нему .000000.

  2. (не рекомендуется). Пусть основной код проанализирует строку, если он вызывает исключение, затем проанализирует ее с новым форматом времени, то есть %Y-%m-%dT%H:%M:%S

  3. Третий подход - просто убрать миллисекунды.

Я не уверен, есть ли в python что-нибудь встроенное для обработки таких ситуаций. Какие-либо предложения?

Почему вы не делаете ни №1, ни №2?

Dan D. 09.11.2018 04:15

Я могу. Но поскольку я все еще изучаю Python и, основываясь на моем прошлом опыте, у python всегда есть супер-краткий способ добиться цели. Вот почему я спрашиваю

Em Ae 09.11.2018 04:47
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
775
2

Ответы 2

Вы можете использовать библиотеку 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

Хотя это может ответить на вопрос авторов, в нем отсутствуют некоторые поясняющие слова и / или ссылки на документацию. Фрагменты исходного кода не очень полезны без некоторых фраз. Вы также можете найти как написать хороший ответ очень полезным. Пожалуйста, отредактируйте свой ответ.

hellow 09.11.2018 10:47

Другие вопросы по теме