因此我们应该将453456秒转换为年,日,小时,分钟和秒。
然而,我似乎无法过去几年。
这是我到目前为止所做的:
#include<iostream>
using namespace std;
int main (){
int secDis;
int years;
const int yearsSec = 31536000;
int days;
cout << "Please give me the time of travel in seconds.";
cin >> secDis;
years = secDis/yearsSec;
days = (yearsSec%secDis) / 1440; /*idk if I am on the right track*/
cout << "You have been traveling for: "
<< years << days;
如果是453456秒,则应为0年5天5小时57分36秒。
//我讨厌我的数学技能。
答案 0 :(得分:3)
您可以在行中反转secDis
和yearsSec
的顺序来计算天数。
此外,一天中的秒数为:24 x 60 x 60
,即86400
。你的订单是60。
年数之后剩余的秒数为(secDis % yearsSec)
。
因此,您需要使用:
days = (secDis % yearsSec ) / 86400;
答案 1 :(得分:2)
std::cout << human_readable_difference(second_point{453456s},
second_point{0s});}
0年0个月5天5小时57分36秒
答案 2 :(得分:1)
我真的很喜欢TemplateRex's answer! (upvoted it)。
但是这里只用<chrono>
库来解决这个问题的方法,假设你的定义是一年是365天(一个非常粗略的假设):
#include <chrono>
#include <iostream>
int
main()
{
using namespace std;
using namespace std::chrono;
using days = duration<int, ratio_multiply<ratio<24>, hours::period>>;
using years = duration<int, ratio_multiply<ratio<365>, days::period>>;
auto s = 453456s;
auto y = duration_cast<years>(s);
s -= y;
auto d = duration_cast<days>(s);
s -= d;
auto h = duration_cast<hours>(s);
s -= h;
auto m = duration_cast<minutes>(s);
s -= m;
std::cout << y.count() << " years "
<< d.count() << " days "
<< h.count() << " hours "
<< m.count() << " minutes "
<< s.count() << " seconds\n";
}
<chrono>
已有单位hours
,minutes
和seconds
。只需为days
和years
再添加两个单元,现在您只需使用duration_cast
将seconds
连续截断为较粗的单位,然后从中删除该截断秒(模运算)。只需继续使用更精细和更精细的单位,直到达到最好的单位(在此示例中为seconds
)。上述计划输出:
0 years 5 days 5 hours 57 minutes 36 seconds
这样,<chrono>
可以为您完成所有转换操作,从而减少出错的可能性。
答案 3 :(得分:0)
您希望分部secDis / yearsSec
的余数为secDis % yearsSec
- 而不是yearsSec % secDis
。
(也就是说,要获得余数,请将/
替换为%
。)
如果您明确定义每个时间单位的秒数,我相信会更容易:
// Let the computer do the computing.
const int perMinute = 60;
const int perHour = 60 * perMinute;
const int perDay = 24 * perHour;
const int perYear = 365 * perDay;
并拼出计算的每一步:
int years = totalSeconds / perYear;
int daySeconds = totalSeconds % perYear;
int days = daySeconds / perDay;
int hourSeconds = daySeconds % perDay;
int hours = hourSeconds / perHour;
// ...