有没有人知道如何使用ctime进行todo算术?我需要能够在“time_t”中获得秒的时间(就像通常那样),然后在将time_t输入ctime之前从中减去设定的秒数,以获得时间和日期。
所以基本上它会计算这么多秒之前的日期。
答案 0 :(得分:2)
<强> time_t的强> 日期和时间的最基本表示是类型time_t。 time_t变量的值是自1970年1月1日以来的秒数,有时称为Unix纪元。这是在内部表示事件的开始和结束时间的最佳方式,因为很容易比较这些值。 struct tm 虽然time_t将日期和时间表示为单个数字,但struct tm将其表示为具有大量数字的结构:
struct tm
{
int tm_sec; /* Seconds. [0-60] (1 leap second) */
int tm_min; /* Minutes. [0-59] */
int tm_hour; /* Hours. [0-23] */
int tm_mday; /* Day. [1-31] */
int tm_mon; /* Month. [0-11] */
int tm_year; /* Year - 1900. */
int tm_wday; /* Day of week. [0-6] */
int tm_yday; /* Days in year.[0-365] */
int tm_isdst; /* DST. [-1/0/1]*/
};
<强>转换强> 您可以使用localtime函数将time_t值转换为struct tm值:
struct tm startTM;
time_t start;
/* ... */
startTM = *localtime(&start);
因此,你可以减去这样的设定秒数
startTm.tm_sec -= somesecond;
像这样添加转换为time_t
struct tm startTM;
time_t start;
/* ... */
start = mktime(&startTM);
并使用ctime fun转换日期
ctime(&start)
希望它有用!
答案 1 :(得分:0)
您可以尝试:
time_t now = time( NULL);
struct tm now_tm = *localtime( &now);
now_tm.tm_sec -= 50; // subtract 50 seconds to the time
now_tm.tm_sec +=1000; // add 1000 sec to the time
printf( "%s\n", asctime( &now_tm));
答案 2 :(得分:0)
time_t是一个整数类型。它总是表示几秒钟,因此您可以从中自由地添加/减去整数。
示例:
time_t now = time(nullptr);
time_t one_minute_ago = now - 60;
std::cout << ctime(&one_minute_ago) << std::endl;