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年以来的秒数,对于给定的date是1月1日。 DD / MM / YYYY存储在日,月,年但我收到编译错误
error: dereferencing pointer to incomplete type
你需要
#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日起返回秒,所以你应该没问题。 我提到上面的完整性。
“时间”函数返回自1970年1月1日UTC以来的秒数。 您不需要调用任何其他功能。 time_t类型只是一个整数类型,它可能相当于int。
Dietrich是正确的,但是如果你想添加从其他日期信息格式化的字符串以来的秒数,你应该考虑使用strftime()
。