Как я могу проанализировать строку времени, содержащую миллисекунды в нем с Python?

Вы можете попробовать вот так:

_context.Accountcollection.AddRange(modules);
_context.SaveChanges();

.
.
.
_context.Accountcalendarevents.AddRange(calendar_event);
_context.SaveChanges();
191
задан Martin Thoma 27 January 2018 в 07:38
поделиться

4 ответа

Python 2.6 добавил новый strftime/strptime макрос %f, который делает микросекунды. Не уверенный, если это документируется где-нибудь. Но если Вы используете 2.6 или 3.0, можно сделать это:

time.strptime('30/03/09 16:31:32.123', '%d/%m/%y %H:%M:%S.%f')

Править: Я никогда действительно работаю с time модуль, таким образом, я не заметил это сначала, но кажется, что время struct_time на самом деле не хранит миллисекунды/микросекунды. Можно быть более обеспеченным использованием datetime, как это:

>>> from datetime import datetime
>>> a = datetime.strptime('30/03/09 16:31:32.123', '%d/%m/%y %H:%M:%S.%f')
>>> a.microsecond
123000
295
ответ дан compie 23 November 2019 в 05:34
поделиться

Для предоставления кода, который ответ nstehr отсылает к (из его источника):

def timeparse(t, format):
    """Parse a time string that might contain fractions of a second.

    Fractional seconds are supported using a fragile, miserable hack.
    Given a time string like '02:03:04.234234' and a format string of
    '%H:%M:%S', time.strptime() will raise a ValueError with this
    message: 'unconverted data remains: .234234'.  If %S is in the
    format string and the ValueError matches as above, a datetime
    object will be created from the part that matches and the
    microseconds in the time string.
    """
    try:
        return datetime.datetime(*time.strptime(t, format)[0:6]).time()
    except ValueError, msg:
        if "%S" in format:
            msg = str(msg)
            mat = re.match(r"unconverted data remains:"
                           " \.([0-9]{1,6})$", msg)
            if mat is not None:
                # fractional seconds are present - this is the style
                # used by datetime's isoformat() method
                frac = "." + mat.group(1)
                t = t[:-len(frac)]
                t = datetime.datetime(*time.strptime(t, format)[0:6])
                microsecond = int(float(frac)*1e6)
                return t.replace(microsecond=microsecond)
            else:
                mat = re.match(r"unconverted data remains:"
                               " \,([0-9]{3,3})$", msg)
                if mat is not None:
                    # fractional seconds are present - this is the style
                    # used by the logging module
                    frac = "." + mat.group(1)
                    t = t[:-len(frac)]
                    t = datetime.datetime(*time.strptime(t, format)[0:6])
                    microsecond = int(float(frac)*1e6)
                    return t.replace(microsecond=microsecond)

        raise
3
ответ дан Community 23 November 2019 в 05:34
поделиться

из списков рассылки Python: парсинг потока миллисекунды. Существует функция, отправленная там, который, кажется, делает задание, хотя, как упомянуто в комментариях автора это - своего рода взлом. Это использует регулярные выражения для обрабатывания исключения, которое повышено и затем делает некоторые вычисления.

Вы могли также попробовать, делают регулярные выражения и вычисления впереди, прежде, чем передать его strptime.

1
ответ дан Christopher Rapcewicz 23 November 2019 в 05:34
поделиться

Моя первая мысль состояла в том, чтобы попытаться передать его '30.03.09 16:31:32.123' (с периодом вместо двоеточия между секундами и миллисекундами.), Но это не работало. Быстрый взгляд на документы указывает, что доли секунды проигнорированы в любом случае...

А-ч, различия в версии. Об этом сообщили как ошибка, и теперь в 2,6 + можно использовать "%S. % f" для парсинга его.

1
ответ дан MarkusQ 23 November 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: