C++ 将秒转换为天、分和秒
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/2419562/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Convert seconds to Days, Minutes and Seconds
提问by Dan
Hey everyone. I've continuing to learn C++ and I've been set the 'challenge' of converting seconds to format as the Days,Minutes and Seconds.
嘿大家。我一直在继续学习 C++,并且我已经设置了将秒转换为天、分钟和秒格式的“挑战”。
For example: 31600000 = 365 days, 46 minutes, 40 seconds.
例如: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;
It works and comes up with the correct answer but after completing it I looked at how other people had tackled it and theirs was different. I'm wondering If I'm missing something.
它有效并提出了正确的答案,但在完成后我查看了其他人是如何解决它的,他们的情况有所不同。我想知道我是否遗漏了什么。
Thanks, Dan.
谢谢,丹。
采纳答案by John Dibling
One of the things about programming is that there is never just one way to do something. In fact if I were to set my mind to it, I might be able to come up with a dozen completely different ways to accomplish this. You're not missing anything if your code meets requirements.
关于编程的一件事是做某事的方法永远不会只有一种。事实上,如果我下定决心,我可能会想出十几种完全不同的方法来实现这一目标。如果您的代码满足要求,您就不会遗漏任何东西。
For your amusement, here's a way to format up hours:minutes:seconds under Windows (elapsed
is a double & represents number of seconds elapsed since... something)
为了您的娱乐,这里有一种在 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));
回答by stoycho
this seems to me to be the easiest way to convert seconds into DD/hh/mm/ss:
在我看来,这是将秒数转换为 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;
I hope it helps!
我希望它有帮助!
Regards,
问候,
Stoycho
斯托伊乔
回答by Przemek
I think is the challenge from Stephen Prata's book. I did it as follows:
我认为是斯蒂芬·普拉塔 (Stephen Prata) 书中的挑战。我是这样做的:
#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;
}
回答by Federico A. Ramponi
For example: 31600000 = 365 days, 46 minutes, 40 seconds.
例如:31600000 = 365 天 46 分 40 秒。
Really?
真的吗?
$ bc
365*24*60*60 + 46*60 + 40
31538800
365*24*60*60 + 1066*60 + 40
31600000
Did you mean "convert the input into days, hours, minutes and seconds, and then discard the hours" or "convert the input into days, total minutes within a day (i.e. can be more than 60), and seconds"?
您的意思是“将输入转换为天、小时、分钟和秒,然后丢弃小时”还是“将输入转换为天、一天内的总分钟数(即可以超过 60)和秒”?
In the second case I think you should replace the instruction for minutes with
在第二种情况下,我认为你应该用
long minutes = input_seconds / secs_to_min % (mins_in_hour * hours_in_day);