#! /usr/bin/env python
# BlinkenArea Stage Director
# Copyright 2013-2014 Stefan Schuermans <stefan@schuermans.info>
# Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html
# a blinkenarea.org project - https://www.blinkenarea.org/
"""time format converter
converts between time in seconds as floating point value and time as
human-readable string in hours, minutes and seconds
<time string> = ((<hours>:)?<minutes>:)?<seconds>
<hours> = [0-9]+
<minutes> = [0-9]+
<seconds> = [0-9]+(.[0-9]+)"""
def sec2str(sec):
"""convert time in seconds to human-readable time string"""
sign = ""
sec100 = round(sec * 100)
if sec100 < 0:
sign = "-";
sec100 = -sec100;
sec1 = sec100 // 100
sec100 = sec100 % 100
minu = sec1 // 60
sec1 = sec1 % 60
hour = minu // 60
minu = minu % 60
return "%s%u:%02u:%02u.%02u" % (sign, hour, minu, sec1, sec100)
def str2sec(str):
"""convert a human readable time string into time in seconds"""
total = 0
section = 0
sign = 1
decimal = 1
for c in str:
if c == ":":
total = (total + sign * section) * 60
section = 0
sign = 1
decimal = 1
elif c == "-":
sign = -sign
elif c == ".":
decimal = 0.1
elif c >= "0" and c <= "9":
if decimal < 1:
section = section + int(c) * decimal