2015-07-16 3 views
0

У меня есть программа, которая выполняет некоторые синтаксические разборки и принимает во времени в формате микросекунды. Однако, читая эти данные, не очень красиво видеть 10000000000 микросекунд. Что-то вроде x секунд или x минут выглядит лучше.Эффективное преобразование времени в Python

Так .. Я построил это:

def convert_micro_input(micro_time): 
    t = int(micro_time) 
    if t<1000: #millisecond 
     return str(t) +' us' 
    elif t<1000000: #second 
     return str(int(t/1000))   + ' ms' 
    elif t<60000000: #is a second 
     return str(int(t/1000000))  + ' second(s)' 
    elif t<3600000000: 
     return str(int(t/60000000))  + ' minute(s)' 
    elif t<86400000000: 
     return str(int(t/3600000000)) + ' hour(s)' 
    elif t<604800000000: 
     return str(int(t/86400000000)) + ' day(s)' 
    else: 
     print 'Exceeded Time Conversion Possibilities' 
     return None 

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

Итак, с учетом сказанного. Под этими ограничениями я задаюсь вопросом, как реализовать эту же логику в более читаемой форме (возможно, используя питонный эквивалент макроса), а также поместить ее в цикл while.

Спасибо всем.

+5

Ваш босс прав о больших количествах. Обычно такого рода вещи вы не делаете с заранее вычисленными числами, но прописаны с более легкими для понимания. Это помогает с последующей отладкой и уменьшает риск. Например, сколько секунд в день? Я не знаю, с головы до ног, но если я вижу '60 * 60 * 24', я знаю, что код прав. Точно так же, действительно ли 360000000 действительно правильный номер при повторном преобразовании? Нет, это не так, потому что я отрубил ноль, и вы, вероятно, даже не заметили! –

+0

Также использование str.format было бы немного более визуально привлекательным '' {} us'.format (t) ' –

+0

Возможный дубликат [Лучший способ инкрементного преобразования микросекунд в соответствующие преобразования в python?] (Http: // stackoverflow .com/questions/31251377/best-way-to-incrementally-convert-microseconds-to-their-соответствующие-conversion-i) – bcdan

ответ

1

питон имеет этот объект, построенный в себя

from datetime import timedelta 
for t in all_times_in_us: 
    print timedelta(seconds=t/1000000.0) 

воспользовавшись, что это самый простой (и самый читаемый), как я думаю. что сказал, что если вы действительно хотите, то можете сделать его более удобным для чтения путем определения некоторых констант в верхней части (или в файле time_util.py или что-то)

MICROSECOND=1 
MILLISECOND=MICROSECOND*1000 
SECOND=MS*1000 
MINUTE=SECOND*60 
HOUR=MINUTE*60 
DAY=HOUR*24 
WEEK=DAY*7 

и использовать эти значения вместо таким образом совершенно ясно, что они

например

if t < MILLISECOND: 
    return "{time} us".format(time=t) 
elif t < SECOND: 
    return "{time} ms".format(time=t//MILLISECOND) 
elif t < MINUTE: 
    return "{time} seconds".format(time=t//SECOND) 
... 
+0

Мне это нужно через какое-то время, и мне нужно использовать аналогичную коннотацию преобразования для двухбитового алхимика сверху – Ryan

0

Используйте datetime модуль с timedelta объекта.

>>> import datetime 
>>> us = 96000000 
>>> mytime = datetime.timedelta(microseconds=us) 
>>> mytime.seconds 
96 
Смежные вопросы