以秒为单位获取当前日期和时间

时间:2010-01-22 05:10:08

标签: c linux datetime

    time_t rawtime;
struct tm *mytm;
time_t result;

time(&rawtime);

mytm=localtime(&rawtime);
mytm->tm_mon=month-1;
mytm->tm_mday=day;
mytm->tm_year=year-1900;

mytm->tm_sec=0;
mytm->tm_min=0;
mytm->tm_hour=0;

result = mktime(mytm);

上面的代码片段,我期待结果显示自1970年以来的no.of秒,给定日期的jan-1st。 DD / MM / YYYY以日,月,年存储 但我得到编译错误

error: dereferencing pointer to incomplete type

3 个答案:

答案 0 :(得分:3)

你需要

#include <time.h>

在您的文件中修复有关不完整类型的错误。

编辑:给出一天,一个月,一年的时间来查找1970年1月1日至当天午夜的秒数:

struct tm mytm = { 0 };
time_t result;
mytm.tm_year = year - 1900;
mytm.tm_mon = month - 1;
mytm.tm_mday = day;
result = mktime(&mytm);
if (result == (time_t) -1) {
    /* handle error */
} else {
    printf("%lld\n", (long long) result);
}

注意在ISO C中,mktime()返回类型time_t的整数值,表示struct tm *参数中的时间,但这种整数值的含义不一定是“自1970年1月1日以来的秒数“。它根本不需要几秒钟。 POSIX强制要求time()mktime()等返回自1970年1月1日以来的秒数,所以你应该没问题。我提到了上面的完整性。

答案 1 :(得分:2)

“time”函数返回自1970年1月1日UTC以来的秒数。您无需调用任何其他功能。 time_t类型只是一个整数类型,它可能等于int。

答案 2 :(得分:1)

Dietrich是正确的,但如果您希望在带有其他日期信息的格式化字符串中添加自Epoch以来的秒数,则应考虑使用strftime()