2010-03-10 17 views
7

Hey alle. Ich habe weiterhin C++ gelernt und mir wurde die "Herausforderung" gestellt, Sekunden in Formate wie Tage, Minuten und Sekunden zu konvertieren.Sekunden in Tage, Minuten und Sekunden umrechnen

Zum Beispiel: 31600000 = 365 Tage, 46 Minuten, 40 Sekunden.

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; 

Es funktioniert und kommt mit der richtigen Antwort, aber ich sah, wie andere Leute hatte es in Angriff genommen und ich war anders, nachdem es abgeschlossen ist. Ich frage mich, ob ich etwas verpasse.

Danke, Dan.

+1

Wie war es anders? – Mark

+0

Tage = Zeit/86400 Stunden = (Zeit/3600) - (Tage * 24) Minuten = (Zeit/60) - (Tage * 1440) - (Stunden * 60) Sekunden = Zeit mod 60 Danke. – Dan

Antwort

5

Eines der Dinge beim Programmieren ist, dass es nie nur einen Weg gibt, etwas zu tun. In der Tat, wenn ich mich darauf einlasse, könnte ich vielleicht ein Dutzend völlig anderer Wege finden, dies zu erreichen. Sie verpassen nichts, wenn Ihr Code die Anforderungen erfüllt.

Für Ihre Unterhaltung, hier ist eine Art und Weise Stunden-Format bis: Minuten: Sekunden unter Windows (elapsed ist eine doppelte & Anzahl von Sekunden darstellt vergangen, seit ... etwas)

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)); 
1

Zum Beispiel: 31600000 = 365 Tage, 46 Minuten, 40 Sekunden.

Wirklich?

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

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

Meinen Sie „convert die Eingabe in Tagen, Stunden, Minuten und Sekunden, und dann die Stunden verwerfen“ oder „wandelt die Eingabe in Tage, insgesamt Minuten innerhalb eines Tages (dh mehr als 60) und Sekunden "?

Im zweiten Fall denke ich, Sie die Anweisung für Minuten mit

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

Ja ich wollte die Stunden verwerfen aber danke für die Antwort. – Dan

8

ersetzen sollen mir dies scheint der einfachste Weg, um zu konvertieren Sekunden in DD/hh/mm/ss:

#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; 

Ich hoffe es hilft!

Grüße,

Stoycho

+0

bist du sicher? Mit deinem Code bekomme ich, dass 1641 Sekunden gleich Tagen = 0 Stunden = 1 Minuten = 27 Sekunden = 21 sind, was mir sehr unwahrscheinlich erscheint (eine Stunde zu viel) – Wim

+0

Ja, du hast recht Wim. Sie müssen gmtime anstelle von localtime verwenden, wenn Sie in die Zerlegungszeit konvertieren. Vielleicht befinden Sie sich in einer UTC + 01: 00-Zeitzone (z. B. CET), von der die Differenz von einer Stunde herrührt. – stoycho

+0

ah, habe nicht gedacht, vielen Dank :-) aber ich benutze momentan die Antwort von John Dibling (siehe oben): int hours = floor (totalseconds/3600.0); int Minuten = Boden (fmod (Gesamtsekunden, 3600,0)/60,0); int Sekunden = fmod (Gesamtsekunden, 60.0); human_readable.sprintf ("% 01du% 02dm% 02ds", Stunden, Minuten, Sekunden); – Wim

3

Ich denke, ist die Herausforderung von Stephen Prata Buch. Ich tat es wie folgt:

#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; 
} 
Verwandte Themen