Журнал чтения Python с отметкой времени, включая микросекунды - PullRequest
3 голосов
/ 22 марта 2011

У меня есть временная метка в файле журнала в формате:

2010-01-01 18:48:14.631829

Я пробовал обычных подозреваемых, таких как strptime, и независимо от того, что я делаю, я получаю этоне соответствует указанному формату.("%Y-%m-%d %H:%M:%S" OR "%Y-%m-%d %H:%M:%S.%f")

Я даже пытался разделить значение на "."так что я могу просто сравнить со значением, не имеющим микросекунды, но оно по-прежнему говорит мне, что оно не соответствует: "% Y-% m-% d% H:% M:% S"

Все, что мне нужно сделать, это простая дельта времени, хаха.Почему время питона так разбросано?время, дата / время, другие виды импорта

Ответы [ 3 ]

4 голосов
/ 22 марта 2011

Вы можете использовать strptime примерно так (только Python 2.6+):

>>> import datetime
>>> s = "2010-01-01 18:48:14.631829"
>>> datetime.datetime.strptime(s, "%Y-%m-%d %H:%M:%S.%f")
datetime.datetime(2010, 1, 1, 18, 48, 14, 631829)

Документы: http://docs.python.org/library/datetime.html#strftime-and-strptime-behavior

...

%f Микросекунда в виде десятичного числа [0,999999], дополненная нулями слева

...

Если вы используете 2,5- и вы не заботитесь о микро, вы можете просто отрубить его:

>>> import re
>>> datetime.datetime.strptime(re.sub('\..*', '', s), "%Y-%m-%d %H:%M:%S")
datetime.datetime(2010, 1, 1, 18, 48, 14)
0 голосов
/ 22 марта 2011

У меня работает следующее (Python 2.6):

>>> import datetime
>>> string1 = '2010-01-01 18:48:14.631829'
>>> string2 = '2010-01-09 13:04:39.540268'
>>> time1 = datetime.datetime.strptime(string1, '%Y-%m-%d %H:%M:%S.%f')
>>> time2 = datetime.datetime.strptime(string2, '%Y-%m-%d %H:%M:%S.%f')
>>> time2 - time1
datetime.timedelta(7, 65784, 908439)

т.е. между двумя датами 7 дней, 65784 секунды и 908439 микросекунд. См. datetime docs для информации об объекте timedelta.

Редактировать: Попробуйте следующее, если вы не можете использовать директиву %f:

>>> time1 = datetime.datetime.strptime(string1.split('.')[0], '%Y-%m-%d %H:%M:%S')
>>> time2 = datetime.datetime.strptime(string2.split('.')[0], '%Y-%m-%d %H:%M:%S')
>>> time2 - time1
datetime.timedelta(7, 65785)
0 голосов
/ 22 марта 2011

Конечно, разбиение строки работает работает:

>>> print s
2010-01-01 18:48:14.631829
>>> time.strptime(s.split('.')[0], "%Y-%m-%d %H:%M:%S")
time.struct_time(tm_year=2010, tm_mon=1, tm_mday=1, tm_hour=18, tm_min=48, tm_sec=14, tm_wday=4, tm_yday=1, tm_isdst=-1)
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...