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
答案 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()
。