C 中的时间函数总是显示 "Wed Dec 31 23:59:59 1969"
time function in C always displays "Wed Dec 31 23:59:59 1969"
我需要为我的应用程序记录当前日期和时间。
我用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 循环内更新时间
您在被 time
编辑 return 时出错,请参阅 docs:
On error, ((time_t) -1)
is returned, and errno is set appropriately.
当然,相对于EPOCH时间的-1是正在打印的日期。但是,您没有存储或使用 time
的 return 值,因此这意味着 t
本身在某种程度上是 -1。您发布的代码与您使用的代码完全一致吗?
因此,由于 time
returns -1 表示您有错误,您必须检查 errno
以查看实际错误是什么。然而,显然 time
应该 return 的唯一错误是 EFAULT
,在这种情况下意味着:
t
points outside your accessible address space.
更新:试试看会发生什么:
time_t t = time(NULL);
没有太多理由按照您原来的方式去做。
如果这确实是您逐字使用的代码,那么我无法解释您如何在 t
中获得 -1,因为 -1 将被 returned通过 time()
但您没有以任何方式访问 return 值。这意味着 t
必须已经是 -1。鉴于它是未初始化的,我认为这是可能的,但我不确定 t
的未初始化内存是否可能在每个程序 运行 上始终为 -1。有人知道吗?尽管如此,它还是会也要求&t
在某种程度上是一个无效地址以触发EFAULT
,这将留下t
的值-1 不变。
您没有提到您使用的是什么操作系统。
所以不清楚你是否有RTC(实时时钟)。
值得注意的是:
Non-PC systems, such as embedded systems built around system-on-chip
processors, use other implementations. They usually won't offer the
same functionality as the RTC from a PC/AT.
根据文档 EFAULT 发生在 :
t points outside your accessible address space
不过,我不确定什么时候会发生。
实际上 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
我需要为我的应用程序记录当前日期和时间。 我用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 循环内更新时间
您在被 time
编辑 return 时出错,请参阅 docs:
On error,
((time_t) -1)
is returned, and errno is set appropriately.
当然,相对于EPOCH时间的-1是正在打印的日期。但是,您没有存储或使用 time
的 return 值,因此这意味着 t
本身在某种程度上是 -1。您发布的代码与您使用的代码完全一致吗?
因此,由于 time
returns -1 表示您有错误,您必须检查 errno
以查看实际错误是什么。然而,显然 time
应该 return 的唯一错误是 EFAULT
,在这种情况下意味着:
t
points outside your accessible address space.
更新:试试看会发生什么:
time_t t = time(NULL);
没有太多理由按照您原来的方式去做。
如果这确实是您逐字使用的代码,那么我无法解释您如何在 t
中获得 -1,因为 -1 将被 returned通过 time()
但您没有以任何方式访问 return 值。这意味着 t
必须已经是 -1。鉴于它是未初始化的,我认为这是可能的,但我不确定 t
的未初始化内存是否可能在每个程序 运行 上始终为 -1。有人知道吗?尽管如此,它还是会也要求&t
在某种程度上是一个无效地址以触发EFAULT
,这将留下t
的值-1 不变。
您没有提到您使用的是什么操作系统。 所以不清楚你是否有RTC(实时时钟)。
值得注意的是:
Non-PC systems, such as embedded systems built around system-on-chip processors, use other implementations. They usually won't offer the same functionality as the RTC from a PC/AT.
根据文档 EFAULT 发生在 :
t points outside your accessible address space
不过,我不确定什么时候会发生。
实际上 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