Как преобразовать секунды в удобные для человека длительности?
Мой скрипт на Python почти готов, так что вот он:
def prettyList(human_time): if len(human_time) > 1: return ' '.join([', '.join(human_time[:-1]), "and", human_time[-1]]) elif len(human_time) == 1: return human_time[0] else: return "" def format_duration(seconds, granularity = 5): intervals = (('years', 29030400), ('months', 2419200), ('weeks', 604800),('days', 86400),('hours', 3600), ('minutes', 60), ('seconds', 1)) human_time = [] for name, count in intervals: value = seconds // count if value: seconds -= value * count if value == 1: name = name.rstrip('s') human_time.append("{} {}".format(value, name)) if not human_time: return "now" human_time = human_time[:granularity] return prettyList(human_time)
Код должен принимать ввод секунд, который затем считывает с правильной грамматикой список длительностей (годы, месяцы, недели, дни, часы, минуты, секунды). Мои тесты проходят, но для одного из более крупных тестов он читает следующее:
'6 months, 2 weeks, 1 hour, 44 minutes and 40 seconds' should equal '182 days, 1 hour, 44 minutes and 40 seconds'
По сути, это требует, чтобы я перевел то, что сейчас составляет 6 месяцев и 2 недели, в 182 дня. Пожалуйста, посоветуйте!
Что я уже пробовал:
Я попытался перевести секунды как длительности, а затем соединить их в соответствии с правильными запятыми и "и", чтобы сделать выходное утверждение грамматически правильным. Моя грамматика на месте, это длительность, которая доставляет мне сейчас неприятности!
Richard MacCutchan
Ваше месячное значение составляет 28 дней, что относится только к февралю в 3 из каждых 4 лет. Месяцы, скорее всего, будут длиться 30 или 31 день.
Значение, которое вы вычисляете в днях и т. д., равно 6,5 месяцам По вашим (неправильным) значениям.