Конвертировать секунды в дни, минуты и секунды - PullRequest
9 голосов
/ 10 марта 2010

Привет всем. Я продолжаю изучать C ++, и передо мной стоит задача - преобразовать секунды в дни, минуты и секунды.

Например: 31600000 = 365 дней, 46 минут, 40 секунд.

using namespace std;
const int hours_in_day = 24;
const int mins_in_hour = 60;
const int secs_to_min = 60;

long input_seconds;
cin >> input_seconds;

long seconds = input_seconds % secs_to_min;
long minutes = input_seconds / secs_to_min % mins_in_hour;
long days = input_seconds / secs_to_min / mins_in_hour / hours_in_day;

cout << input_seconds << " seconds = "
     << days << " days, "
     << minutes << " minutes, "
     << seconds << " seconds ";

return 0;

Он работает и дает правильный ответ, но после его завершения я посмотрел, как другие люди справились с этим, и у них было другое. Мне интересно, если я что-то упустил.

Спасибо, Дэн.

Ответы [ 4 ]

9 голосов
/ 11 июля 2013

мне кажется, это самый простой способ конвертировать секунды в ДД / чч / мм / сс:

#include <time.h>
#include <iostream>
using namespace std;    

time_t seconds(1641); // you have to convert your input_seconds into time_t
tm *p = gmtime(&seconds); // convert to broken down time

cout << "days = " << p->tm_yday << endl;
cout << "hours = " << p->tm_hour << endl;
cout << "minutes = " << p->tm_min  << endl;
cout << "seconds = " << p->tm_sec << endl;

Надеюсь, это поможет!

С уважением,

Стойчо

6 голосов
/ 10 марта 2010

Одной из особенностей программирования является то, что никогда не существует только одного способа что-то сделать. На самом деле, если бы я подумал об этом, я мог бы найти дюжину совершенно разных способов сделать это. Вы ничего не пропустите, если ваш код соответствует требованиям.

Для вашего удовольствия, вот способ форматирования часов: минут: секунд под Windows (elapsed - это двойное число, представляющее количество секунд, прошедших с момента ... что-то)

sprintf_s<bufSize>(buf, "%01.0f:%02.0f:%02.2f", floor(elapsed/3600.0), floor(fmod(elapsed,3600.0)/60.0), fmod(elapsed,60.0));
5 голосов
/ 06 ноября 2014

Я думаю, что это вызов из книги Стивена Прата. Я сделал это следующим образом:

#include <iostream>

using namespace std;

int main()
{
    long input_seconds = 31600000;

    const int cseconds_in_day = 86400;
    const int cseconds_in_hour = 3600;
    const int cseconds_in_minute = 60;
    const int cseconds = 1;

    long long days = input_seconds / cseconds_in_day;
    long hours = (input_seconds % cseconds_in_day) / cseconds_in_hour;
    long minutes = ((input_seconds % cseconds_in_day) % cseconds_in_hour) / cseconds_in_minute;
    long seconds = (((input_seconds % cseconds_in_day) % cseconds_in_hour) % cseconds_in_minute) / cseconds;
    cout << input_seconds << " seconds is " << days << " days, " << hours << " hours, " << minutes << " minutes, and " << seconds << " seconds.";

    cin.get();
    return 0;
}
1 голос
/ 10 марта 2010

Например: 31600000 = 365 дней, 46 минут, 40 секунд.

Действительно

$ bc
365*24*60*60 + 46*60 + 40
31538800

365*24*60*60 + 1066*60 + 40
31600000

Вы имели в виду «преобразовать ввод в дни, часы, минуты и секунды, а затем отбросить часы» или «преобразовать ввод в дни, общее количество минут за день (т. Е. Может быть больше 60) и секунд»

Во втором случае, я думаю, вы должны заменить инструкцию для минут на

long minutes = input_seconds / secs_to_min % (mins_in_hour * hours_in_day);
...