питон датавремя.strptime: игнорировать долю секунды

Я работаю над преобразованием читаемого человеком времени в

3 ответов


Так как меня действительно не волнуют доли секунды, я должен просто взять первый 19 символы читаемой человеком строки и применить простой формат для этого.

>>> humanTime = '2012/06/10T16:36:20.509Z'
>>> datetime.datetime.strptime(humanTime[:19], "%Y/%m/%dT%H:%M:%S")
datetime.datetime(2012, 6, 10, 16, 36, 20)

решение вашей конкретной проблемы: используйте %f для микросекунд:

>>> datetime.datetime.strptime(humanTime, "%Y/%m/%dT%H:%M:%S.%fZ")

однако, проблема все еще существует для общего случая. Если у вас будет более 6 цифр после точки, то это решение не будет работать.

проблема в том, что, насколько мне известно, datetime.значение datetime.принятые форматы strptime не включают плавающие секунды в целом. Обходной путь-игнорировать секунды при создании переменной datetime, а затем добавлять секунды с помощью значение datetime.timedelta.

>>> import numpy as np
>>> import datetime
>>> 
>>> humanTime = '2012/06/10T16:36:20.509Z'
>>> dt_time_no_seconds = datetime.datetime.strptime(humanTime[:-8], "%Y/%m/%dT%H:%M")
>>> seconds = np.float(humanTime[-7:-1])
>>> dt_time = dt_time_no_seconds+datetime.timedelta(seconds=seconds)
>>> dt_time_no_seconds
datetime.datetime(2012, 6, 10, 16, 36)
>>> dt_time
datetime.datetime(2012, 6, 10, 16, 36, 20, 509000)

надеюсь, что это помогает.


директива %f интерпретирует дробные секунды:https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior

humanTime = '2012/06/10T16:36:20.509Z'
print datetime.datetime.strptime(humanTime, '%Y/%m/%dT%H:%M:%S.%fZ')

>> 2012-06-10 16:36:20.509000