在Python中有效地转换时间

时间:2015-07-16 21:19:58

标签: python

我有一个程序可以进行一些解析并以微秒格式收集时间。但是,在读取这些数据时,看到10000000000微秒并不是很漂亮。像x秒或x分钟这样的东西看起来更好。

所以..我建立了这个:

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

现在,在我看来,这看起来很好,但是,我的老板并不满意。他说,如果有人在一年内编辑这个数据,那么这些数字在可读性方面会让人感到困惑,他说会在一段时间内实现这一点。

所以,说到这一点。在这些约束下,我想知道如何将这个相同的逻辑实现为更可读(可能使用python等效的宏)形式,并将它放在while循环中。

谢谢大家。

2 个答案:

答案 0 :(得分:1)

python将此工具内置于其中

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)
...

答案 1 :(得分:0)

datetime模块与timedelta对象一起使用。

>>> import datetime
>>> us = 96000000
>>> mytime = datetime.timedelta(microseconds=us)
>>> mytime.seconds
96