Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 26, 2015 16:29:47

ivsatel
Зарегистрирован: 2014-12-06
Сообщения: 18
Репутация: +  1  -
Профиль   Отправить e-mail  

Улучшить функцию

Эта функция возвращает время из наносекунд в часы минуты секунды милесекунды:

def convert_time(t):
        s, ns = divmod(t, 1000000000)
        m, s = divmod(s, 60)
        end_res = ['00:', '00:', '00:', '00']
        res = ''
        if m < 60:
            if len(str(m)) < 2:
                end_res[1] = '0'+str(m)+':'
            else:
                end_res[1] = str(m)+':'
            if len(str(s)) < 2:
                end_res[2] = '0'+str(s)+':'
            else:
                end_res[2] = str(s)+':'
            try:
                end_res[3] = str(round(ns/1000000000))
            except IndexError:
                end_res[3] = '00'
        else:
            h, m = divmod(m, 60)
            if len(str(h)) < 2:
                end_res[0] = '0'+str(h)+':'
            else:
                end_res[0] = str(h)+':'
            if len(str(m)) < 2:
                end_res[1] = '0'+str(m)+':'
            else:
                end_res[1] = str(m)+':'
            if len(str(s)) < 2:
                end_res[2] = '0'+str(s)+':'
            else:
                end_res[2] = str(s)+':'
            end_res[3] = str(round(ns/1000000000))
        for x in range(0, 4):
            res += end_res[x]
        print(res)
Желаемый вывод
list ['00:','00:','00:','00:']
Возможно ли её улучшить, или быть может есть стандартные билиотеки для такой реализации.

Отредактировано ivsatel (Фев. 26, 2015 16:31:05)

Офлайн

#2 Фев. 26, 2015 16:58:04

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

Улучшить функцию

Через datetime можно сделать

import datetime
def convert_time(t):
    dt = datetime.datetime.fromtimestamp(t/1e9)
    mytime = dt.strftime('%H:%M:%S:%f')[:-4].split(':')
    return map(lambda x: '%s:' % x, mytime)



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Офлайн

#3 Фев. 26, 2015 17:06:58

ivsatel
Зарегистрирован: 2014-12-06
Сообщения: 18
Репутация: +  1  -
Профиль   Отправить e-mail  

Улучшить функцию

ajib6ept
Почему-то вместо двух секунд возвращает еще и 3-и часа

import datetime
def convert_time(t):
    dt = datetime.datetime.fromtimestamp(t/1e9)
    mytime = dt.strftime('%H:%M:%S:%f')[:-4].split(':')
    return map(lambda x: '%s:' % x, mytime)
a = convert_time(2497123419)
for x in a:
    print(x)

Офлайн

#4 Фев. 26, 2015 17:37:26

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

Улучшить функцию

Видимо часовой пояс, сейчас проверил через utcfromtimestamp, час не появляется.

dt = datetime.datetime.utcfromtimestamp(t/1e9)



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Офлайн

#5 Фев. 26, 2015 17:43:08

ivsatel
Зарегистрирован: 2014-12-06
Сообщения: 18
Репутация: +  1  -
Профиль   Отправить e-mail  

Улучшить функцию

ajib6ept
Видимо часовой пояс, сейчас проверил через utcfromtimestamp, час не появляется.
Спасибо!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version