C#: Преобразование секунд в минуты в часы?

Хорошо, во-первых, я почти уверен, что я не должен использовать TimeSpan для этого задания; скорее ряд формул, который показывает секунды, минуты и часы в окне сообщения, когда пользователь вводит количество секунд в текстовом поле.

Вот где я застрял. Мы должны проверить наши ответы на примере: 7565 секунд — это 2 часа, 6 минут и 5 секунд. Однако мой код вычисляет его как 2 часа, 6 минут и 6 секунд. Он также сохраняет этот ответ, когда начальное число равно 7560 секундам. Я весьма озадачен!! Это условный сценарий, в котором окно сообщения показывает только секунды, если пользователь вводит менее 60 секунд, только минуты + секунды, если пользователь вводит от 60 до 3600 секунд, и часы + минуты + секунды, если введено более 3600 секунд. Вот что у меня есть до сих пор, и я был бы признателен за любое понимание того, почему мой расчет не работает :)

Спасибо за ответы! Но 7565 не является константой; пользователь может ввести любое количество секунд, но мой профессор использовал 7565 в качестве примера, чтобы проверить, на правильном ли мы пути.

private void calculateButton1_Click(object sender, EventArgs e)
    {
        int totalSeconds, hours, minutes, minutesRemainder, hoursRemainderMinutes, hoursRemainderSeconds;
        totalSeconds = int.Parse(secondsTextBox1.Text);
        minutes = totalSeconds / 60;
        minutesRemainder = totalSeconds % 60;
        hours = minutes / 60;
        hoursRemainderMinutes = minutes % 60;
        hoursRemainderSeconds = hoursRemainderMinutes % 60;

        if (totalSeconds < 60)
        {
            MessageBox.Show(totalSeconds.ToString());
        }

        else if (totalSeconds < 3600)
        {

            MessageBox.Show(minutes.ToString() + " minutes, " + minutesRemainder.ToString() + " seconds");
        }

        else if (totalSeconds>3600)
        {
            MessageBox.Show(hours.ToString() + " hours, " + hoursRemainderMinutes.ToString() + " minutes, " + hoursRemainderSeconds.ToString() + " seconds");
        }

    }

person rachelabr    schedule 12.09.2014    source источник
comment
Это может быть ответом на ваш вопрос, но вы можете сделать это: TimeSpan.FromSeconds(7565).ToString(). Это вернет "02:06:05".   -  person Martin Liversage    schedule 12.09.2014
comment
ОП заявил, что он не думал, что должен использовать TimeSpan. но это самый простой способ: P. Следует отметить, что ваш блок if-elsif ... что вы получите, когда введете 3600 полных секунд? оно не меньше и не больше 3600.   -  person Alex Anderson    schedule 12.09.2014


Ответы (1)


Попробуйте использовать модульную арифметику.

int totalSeconds = 7565;

int hours = totalSeconds / 3600;
int minutes = (totalSeconds % 3600) / 60;
int seconds = (totalSeconds % 60);

...

if (hours > 0)
  MessageBox.Show(String.Format("{0} hours, {1} minutes, {2} seconds", hours, minutes, seconds));
else if (minutes > 0)
  MessageBox.Show(String.Format("{0} minutes, {1} seconds", minutes, seconds));
else
  MessageBox.Show(String.Format("{0} seconds", seconds));
person Dmitry Bychenko    schedule 12.09.2014