我有我的C程序从给定的特定日期获取纪元值。代码如下所示。
#include<stdio.h>
#include<time.h>
#include<string.h>
#include<stdlib.h>
#define _XOPEN_SOURCE
char *MMDDYYYYToEpoch(char str[]);
int main()
{
char *str= "04252017";
printf("epoch value of %s is %s\n",str,MMDDYYYYToEpoch(str));
char *st= "10302003";
printf("epoch value of %s is %s\n",st,MMDDYYYYToEpoch(st));
char *sr= "07311993";
printf("epoch value of %s is %s\n",sr,MMDDYYYYToEpoch(sr));
return 0;
}
char *MMDDYYYYToEpoch(char str[])
{
struct tm *day;
time_t epoch,today;
static char *buffer;
buffer = malloc(25);
char mbuf[3],dbuf[3],ybuf[5];
mbuf[0] = str[0];
mbuf[1] = str[1];
dbuf[0] = str[2];
dbuf[1] = str[3];
ybuf[0] = str[4];
ybuf[1] = str[5];
ybuf[2] = str[6];
ybuf[3] = str[7];
int m,d,y;
m = atoi(mbuf);
d = atoi(dbuf);
y = atoi(ybuf);
time(&today);
day = localtime(&today);
day->tm_mon = m-1;
day->tm_mday = d;
day->tm_year = y-1900;
epoch = mktime(day);
sprintf(buffer,"%ld",epoch);
return buffer;
}
我得到如下的输出。
epoch value of 04252017 is 1493160110
epoch value of 10302003 is 1067553710
epoch value of 07311993 is 744158510
5秒后再次运行该程序,我得到这样的输出
epoch value of 04252017 is 1493160115
epoch value of 10302003 is 1067553715
epoch value of 07311993 is 744158515
这些值是常数。为什么这些值一次又一次地变化。但是,这些时期值不是特定日期的确切值,我已经检查了一些受信任的网站,这些网站计算出特定日期的确切时期值。有人可以帮我吗? Click Here to Check the Epoch value for a specific date
注意:我还检查了时区条件。
最佳答案
这些行:
time(&today);
day = localtime(&today);
将
day
指向包含当前时间(精确到秒)的struct tm
。因此,如果您以后仅修改日期,月份和年份成员,则将获得当前时间和该日期的组合。当然结果将取决于当前时间!要解决此问题,请提供您自己的
struct tm
初始化为0(假设您想要一天的开始时间的时间戳,例如午夜0:00),并且不要调用time
和localtime
。像这样:struct tm day = {0};
[...]
day.tm_mon = m-1;
day.tm_mday = d;
day.tm_year = y-1900;
epoch = mktime(&day);
还应注意Weather Vane的注释,并在
0
,mbuf
和dbuf
中添加ybuf
终止符;在当前代码中,您有未定义的行为。由于您的堆栈已初始化为零,因此无法正常运行。关于c - 没有在C中获得确切的纪元值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43926782/