我想找到现在和给定日期之间的时差,以天,小时,分钟和秒为单位。
std::tm tm_Trg;
tm_Trg.tm_year = 120; // 2020
tm_Trg.tm_mon = 4; // May
tm_Trg.tm_mday = 15; // 15th
tm_Trg.tm_hour = 11; // 11:35:13
tm_Trg.tm_min = 35;
tm_Trg.tm_sec = 13;
tm_Trg.tm_isdst = -1;
std::time_t tt_Now;
std::time_t tt_Trg;
std::time_t tt_Dif;
tt_Now = std::time(nullptr);
tt_Trg = std::mktime(&tm_Trg);
tt_Dif = tt_Trg - tt_Now;
// ...
int nDays = ???
int nHours = ???
int nMinutes = ???
int nSeconds = ???
为此有一个STL函数吗?如果不是,此转换最简单的算法是什么?
最佳答案
编译时我遇到了一些小问题(我必须删除所有std::实例)。
剩下的部分并不是您想要的(您需要数年和数天,而不仅仅是数天),但是如果您出于某些原因确实想要使用库函数,则:
struct tm *timeinfo = gmtime(&tt_Dif);
int nYears = timeinfo->tm_year - 70;
int nDays = timeinfo->tm_yday;
int nHours = timeinfo->tm_hour;
int nMinutes = timeinfo->tm_min;
int nSeconds = timeinfo->tm_sec;
printf("nYears:\t%d\nnDays:\t%d\nnHours:\t%d\nnMinutes:\t%d\nnSeconds:\t%d\n", nYears, nDays, nHours, nMinutes, nSeconds);
否则,获得结果的一种非常简单的方法是:
int nSeconds = tt_Dif % 60; tt_Dif /= 60;
int nMinutes = tt_Dif % 60; tt_Dif /= 60;
int nHours = tt_Dif % 24; tt_Dif /= 24;
int nDays = tt_Dif;
printf("nDays:\t%d\nnHours:\t%d\nnMinutes:\t%d\nnSeconds:\t%d\n", nDays, nHours, nMinutes, nSeconds);
关于c++ - 如何将 `std::time_t`变量中的时差表示为天,小时,分钟和秒?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21565475/