2015-03-08 3 views
2

Ниже код не конвертировал миллисекунды в поплавок. Каков правильный способ сделать это?datetime to float не включает миллисекунды

import datetime 

def date2float(datestr): 
    format = "%Y-%m-%d %H:%M:%S.%f" 
    dateobj = datetime.datetime.strptime(datestr, format) 
    print dateobj 
    dtfloat = mktime(dateobj.timetuple()) 
    print dtfloat 
    return dtfloat 

date2float("2015-03-08 10:34:01.2") 
date2float("2015-03-08 10:34:01.4") 

Текущий выход:

2015-03-08 10:34:01.200000 
1425828841.0 
2015-03-08 10:34:01.400000 
1425828841.0 

Очевидно, что 0,2 и 0,4 было потеряно.

+0

что входной часовой пояс? – jfs

+0

Это должно быть по умолчанию, но в моем случае меня это не волновало. –

+0

Почему вы заботитесь о миллисекундах, если вы не заботитесь о том, что ошибаетесь часами, если используете неправильный часовой пояс? – jfs

ответ

2

mktime не обрабатывает дробные секунды. Вы можете добавить микросекунд вручную:

def date2float(datestr): 
    format = "%Y-%m-%d %H:%M:%S.%f" 
    dateobj = datetime.datetime.strptime(datestr, format) 
    dtfloat = mktime(dateobj.timetuple()) 
    dtfloat += dateobj.microsecond/1000000.0 
    return dtfloat 

В Python 3.3+:

>>> import datetime 
>>> datetime.datetime.now().timestamp() 
1425826728.740325 
+0

'mktime()' (и 'timestamp()', который использует его внутренне) может завершиться неудачно во время переходов DST и для прошлых/будущих дат, если ваш местный часовой пояс может иметь разные значения utc в разное время (во многих часовых поясах). Используйте явный часовой пояс pytz, соответствующий вашему местному часовому поясу, чтобы избежать проблем. – jfs

Смежные вопросы