2009-11-23 4 views
3

У меня есть сценарий здесь (а не мой), который вычисляет длину фильма в моем спутнике. Он показывает длину в минут: секундКак получить часы: минуты

Я хочу иметь, что в часов: минут

Какие изменения я должен сделать?

Это мир сценария обеспокоен:

if len > 0: 
    len = "%d:%02d" % (len/60, len % 60) 
else: 
    len = "" 

res = [ None ] 

Я уже получил часы путем деления на 3600, а не 60, но не может получить минут ...

Заранее спасибо

Питер

+1

Привет, Питер. Можете ли вы добавить тег, говорящий на каком языке вы используете, поэтому мы не ошибаемся с ответом? благодаря! –

+0

Есть 60 минут в один час. Поэтому, если вы знаете, сколько минут есть, просто разделите минуты на 60, и у вас будет столько часов. –

ответ

8
hours = secs/3600 
minutes = secs/60 - hours * 60 

len = "%d:%02d" % (hours, minutes) 

Или, для более поздних версий Python:

hours = secs // 3600 
minutes = secs // 60 - hours * 60 

len = "%d:%02d" % (hours, minutes) 
+0

Да, это сработало! Эта небольшая проблема из полного Python-noob решена. Спасибо всем! Peter – Peter

0

Значит, количество секунд в фильме? Это плохое имя. Python уже использует слово len для чего-то другого. Измени это.

def display_movie_length(seconds): 
    # the // ensures you are using integer division 
    # You can also use/in python 2.x 
    hours = seconds // 3600 

    # You need to understand how the modulo operator works 
    rest_of_seconds = seconds % 3600 

    # I'm sure you can figure out what to do with all those leftover seconds 
    minutes = minutes_from_seconds(rest_of_seconds) 

    return "%d:%02d" % (hours, minutes) 

Все, что вам нужно сделать, это выяснить, что minutes\_from\_seconds() должен выглядеть. Если вы все еще запутались, сделайте небольшое исследование по модулю оператора.

0

Существует хороший ответ на это здесь https://stackoverflow.com/a/20291909/202168 (а позже дубликат этого вопроса)

Однако, если вы имеете дело с часовым поясом смещением в строке даты и времени, то вам необходимо также обрабатывать отрицательные часы, в этом случае заполнение нулями в ответ Мартейн не работает

например, он будет возвращать -4:00 вместо -04:00

Чтобы это исправить код становится немного длиннее, как показано ниже:

offset_h, offset_m = divmod(offset_minutes, 60) 
sign = '-' if offset_h < 0 else '+' 
offset_str = '{}{:02d}{:02d}'.format(sign, abs(offset_h), offset_m) 
8

Вы можете использовать timedelta

from datetime import timedelta 
str(timedelta(minutes=100))[:-3] 
# "1:40" 
+3

Nice. Я бы добавил: 'str (timedelta (minutes = 100)) [: - 3]', если вы не хотите показывать секунды. – J0ANMM

Смежные вопросы