获取C中特定日期的纪元秒数

时间:2017-12-04 18:53:30

标签: c epoch time.h

如何获得自1970年1月1日以来特定日期的秒数,例如:" 2017-09-14 23:24:46"

#include <stdio.h>
#include <stdint.h>
#include <time.h>
int main()
{

    struct tm tmVar;
    time_t timeVar;
    sscanf("2017-09-14 23:24:46","%d-%d-%d %d:%d:%d",&tmVar.tm_year
                        ,&tmVar.tm_mon, &tmVar.tm_mday,
                         &tmVar.tm_hour, &tmVar.tm_min, 
                         &tmVar.tm_sec);
     tmVar.tm_isdst = 1;
     printf("tm_year :%d\n",tmVar.tm_year);
     printf("tm_month :%d\n",tmVar.tm_mon);
     printf("tm_day :%d\n",tmVar.tm_mday);
     printf("tm_hour :%d\n",tmVar.tm_hour);
     printf("tm_min :%d\n",tmVar.tm_min);
     printf("tm_sec :%d\n",tmVar.tm_sec);
     timeVar = mktime(&tmVar);
     printf("time %d\n",timeVar);
 }

然而输出并不是我所期望的:

tm_year:2017

tm_month:9

tm_day:14

tm_hour:23

tm_min:24

tm_sec:46

时间1336625342

根据epochconverter.com,正确的值应该是1510529086.为什么我没有得到这个值?

1 个答案:

答案 0 :(得分:2)

您需要调整结构中存储的值。

tm_year字段是自1900年以来的年份,因此从该值中减去1900。

tm_mon字段是自1月以来的月份,因此从此值中减去1。

填充结构后,请执行以下操作:

 tmVar.tm_year -= 1900;
 tmVar.tm_mon--;

输出:

tm_year :117
tm_month :8
tm_day :14
tm_hour :23
tm_min :24
tm_sec :46
time 1505445886