C中的时间函数始终显示“Wed Dec 31 23:59:59 1969”

时间:2015-12-26 07:04:04

标签: c time unix-timestamp

我要求为我的应用程序记录当前日期和时间。 我用C编写了代码。我附上了代码

#include <stdio.h>
#include <time.h>

int main()
{   time_t t;


     while(1)
     { time(&t);
       printf("Today's date and time : %s",ctime(&t));   
     } 

}

输出

Today's date and time : Wed Dec 31 23:59:59 1969
Today's date and time : Wed Dec 31 23:59:59 1969
Today's date and time : Wed Dec 31 23:59:59 1969
Today's date and time : Wed Dec 31 23:59:59 1969

自UNIX时间开始以来,时间没有得到更新。 我在另一台计算机上运行相同的程序,运行得很好。 为什么我的计算机出现此错误?如何解决?

谢谢

任何帮助表示感谢。

编辑:代码中有错误,我纠正了它,以便在while循环中更新时间

2 个答案:

答案 0 :(得分:5)

time返回错误,请参阅docs

  

出错时,返回((time_t) -1),并正确设置errno。

当然,相对于EPOCH时间的-1是正在打印的日期。但是,您没有存储或使用time的返回值,因此这意味着t本身在某种程度上为-1。您是否发布了正在使用的确切代码?

因为time返回-1表示您有错误,您必须检查errno以查看实际错误是什么。但是,显然time应返回的唯一错误是EFAULT,在此上下文中表示:

  

t点位于您可访问的地址空间之外。

更新:尝试执行此操作以查看会发生什么:

time_t t = time(NULL);

没有太多理由按照你的方式去做。

如果这是您逐字使用的代码,那么我无法解释您在t中获得-1的原因,因为-1将由time()返回但是您没有以任何方式访问返回值。这意味着t必须已经为-1。鉴于它是未初始化的,我认为这是可能的,但我不确定t的未初始化内存是否可能在每次程序运行时始终为-1。有人知道吗?但是,还要要求&t在某种程度上是一个无效的地址,它会触发EFAULT,这会使t的值保持不变-1

答案 1 :(得分:-1)

您还没有提到您正在使用的操作系统。 所以目前还不清楚你是否有RTC(实时时钟)。

值得注意的是:

  

非PC系统,例如围绕片上系统构建的嵌入式系统   处理器,使用其他实现。他们通常不会提供   与PC / AT的RTC功能相同。

根据文档 EFAULT 在以下时间发生:

  

t 指出您可访问的地址空间

但是,我不确定何时会发生这种情况。

实际上 EFAULT 被定义为here

#define EFAULT          14      /* Bad address */


您的代码在开始时给了我类似于您的结果。 但这个对我有用:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{

    time_t *t;
    t=(time_t*)malloc(sizeof(*t));
    time(t);
    printf("Today's date and time : %s",ctime(t));
    free(t); //Clean up the mess we've created
    return 0;
}

但我不知道为什么。

参考: RTC