2010-03-10 106 views
7

嘿大家。我繼續學習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; 

它的工作原理和正確答案來了,但在完成之後我看了看其他人如何解決了它,他們是不同的。我想知道如果我錯過了什麼。

謝謝,丹。

+1

它有什麼不同? – Mark 2010-03-10 18:41:40

+0

天=時間/ 86400 小時=(時間/ 3600) - (天* 24) 分鐘=(時間/ 60) - (天* 1440) - (小時* 60) 秒=時間模60 感謝。 – Dan 2010-03-10 18:42:35

回答

5

有關編程的一件事情是,從來沒有一種方法可以做某件事。事實上,如果我想着它,我可能會想出十幾種完全不同的方法來實現這一點。如果您的代碼符合要求,您不會錯過任何內容。

爲了您的娛樂,這裏的格式化漲分辦法:分: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)); 
1

例如: 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); 
+0

是的,我的意思是放棄時間,但謝謝你的答覆。 – Dan 2010-03-10 20:01:20

8

這對我來說似乎是秒轉換成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; 

我希望它有幫助!

問候,

Stoycho

+0

你確定嗎?用你的代碼,我得到1641秒等於天數= 0小時= 1分鐘= 27秒= 21,這對我來說似乎不太可能(一小時太多) – Wim 2014-04-23 09:28:56

+0

是的,你是正確的Wim。轉換爲細分時間時,您必須使用gmtime而不是本地時間。也許你在UTC +01:00時區(例如CET),其中一小時的差異來自哪裏。 – stoycho 2014-04-25 13:30:23

+0

啊,沒有想到那個,非常感謝你:-)但是我現在使用的是John Dibling的答案(見上面): int hours = floor(totalseconds/3600.0); int minutes = floor(fmod(totalseconds,3600.0)/60.0); int seconds = fmod(totalseconds,60.0); human_readable.sprintf(「%01du%02dm%02ds」,小時,分鐘,秒); – Wim 2014-04-26 09:01:59

3

我認爲是斯蒂芬·普拉塔的書挑戰。我做了如下:

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