数学与ctime和time_t

时间:2014-12-02 03:05:09

标签: c++ datetime ctime

有没有人知道如何使用ctime进行todo算术?我需要能够在“time_t”中获得秒的时间(就像通常那样),然后在将time_t输入ctime之前从中减去设定的秒数,以获得时间和日期。

所以基本上它会计算这么多秒之前的日期。

3 个答案:

答案 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;