Создается временная структура, инициализированная из значения литерала, и она длится до тех пор, пока ссылка. Вы можете делать то, что вам нравится с этим объектом.
Что касается времени жизни, это точно так же, как если бы вы написали const int& x = 5
; только, там, тот факт, что вы работаете с автоматически созданным временным объектом, замаскирован, потому что const
не позволяет вам доказать его с помощью мутации.
blockquote>
[C++14: 8.5.3/5]:
[..] ЕслиT1
является неклассовым типом, временный тип « cv1T1
» создается и инициализируется с копией (8.5) из выражения инициализатора. Ссылка затем привязана к временному. [..]
Кроме того:
from datetime import datetime
def str2datetime(s):
parts = s.split('.')
dt = datetime.strptime(parts[0], "%Y-%m-%d %H:%M:%S")
return dt.replace(microsecond=int(parts[1]))
Используя strptime
самостоятельно для парсинга даты/строки времени (так никакая потребность продумать угловые случаи для regex).
Используйте dateutil модуль. Это поддерживает намного более широкий диапазон форматов даты и времени, чем созданный в Python.
Вам будет нужно к easy_install dateutil для следующего кода для работы:
from dateutil.parser import parser
p = parser()
datetime_with_microseconds = p.parse('2009-02-10 16:06:52.598800')
print datetime_with_microseconds.microsecond
результаты в:
598799
Кто-то уже зарегистрировал ошибку с этой проблемой: Выпуск 1982 . Так как Вам нужно это для работы с python 2.5, необходимо проанализировать значение вручную и затем управлять объектом даты и времени.
Это не могло бы быть лучшее решение, но можно использовать регулярное выражение:
m = re.match(r'(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})(?:\.(\d{6}))?', datestr)
dt = datetime.datetime(*[int(x) for x in m.groups() if x])