最近在Python的工作中用到要把时间转换成秒,或者把秒转换成时间的问题。
把时间转换成秒比较简单:
ftime = float(datetime)
这样ftime就是一个以秒为单位的时间了。
经过运算后,又需要把以秒为单位的时间转换成时分秒的形式,一开始采用的是以下的代码:
total_time = time.strftime("%H:%M:%S", time.localtime( float(1852) ))
正确的输出是: 00:30:52
但是实际输出是:08:30:52
经查,因为本地时间(北京时间(GMT +8))比格林威治时间多了8小时,所以转换的时候就在小时上多了8小时, 因此采用以下代码把秒转换成时间:
total_time = time.strftime("%H:%M:%S", time.gmtime( float(1852) ))
此时的输出就是正确的00:30:52.
Notes: 要注意循环的开始条件及结束条件(刚刚一个小程序的开始条件没有处理好,所以在计数的时候总是少了1,就是因为第一个满足条件的record没有被计数, 浪费了半天时间。)
NOTE2
注意,如果从秒转换成时分大于24小时,用上面的方法就不好了。这就需要自己编写一个小程序去处理秒到时分秒的转换了。这里给出一个转换的小程序如下 :
def sec2time(sec):
''' Convert seconds to '#D days#, HH:MM:SS.FFF' '''
if hasattr(sec,'__len__'):
return [sec2time(s) for s in sec]
m, s = divmod(sec, 60)
h, m = divmod(m, 60)
#d, h = divmod(h, 24)
pattern = r'%02d:%02d:%02d'
return pattern % (h, m, s)
同样也给出一个时分秒到秒的转换小程序:
这里写代def t2s(t): #t format is hh:mm:ss
if t != '0':
h,m,s = t.strip().split(":")
return int(h) * 3600 + int(m) * 60 + int(s)
else:
return 0
http://www.baike.com/wiki/gmtime
http://www.runoob.com/python/att-time-strftime.html