【问题标题】:localtime() giving incorrect valuelocaltime() 给出不正确的值
【发布时间】:2013-05-20 15:48:06
【问题描述】:

网上有很多代码让我相信下面的代码会给我当前时间。然而,事实并非如此。我得到了我认为是 UNIX 纪元的时间; 1970 年 1 月 1 日 00:00;00。

现在真的很烦人,为什么我的计算机系统时钟控制不了当前时间?我正在为 C 中的嵌入式系统执行此操作。IDE 是 mplab。

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

int main () {

time_t time_raw_format;
struct tm * ptr_time;

time ( &time_raw_format );
ptr_time = localtime ( &time_raw_format );
printf ("Current local time and date: %s", asctime(ptr_time));

return 0;
}

【问题讨论】:

  • 你得到了什么,你期待什么?你的代码对我来说很好。
  • 您可能想检查time 返回的内容,以确保它成功。当然还要检查你的时钟。
  • 我预计当前时间; 2013 年 5 月 20 日 16:51。正如我所说,1970 年 1 月 1 日 00:00。
  • status-no-repro 在这里工作。检查 Joachim Pileborg 说要检查的内容。
  • time() 的返回值呢,而不仅仅是输出参数中传回的值。它是否等于(time_t)-1?如果是这样,你需要检查errno

标签: c mplab


【解决方案1】:

C 标准不需要时间可用,time 例程可能会返回 –1(并将其放置在指向的位置)。您的代码不会检查返回值,因此没有理由相信之后的任何代码都会执行任何有用的操作。因此,首先要做的是检查time的返回值。

同样,如果无法转换为本地时间,localtime 可能会返回空指针,并且您的代码不会检查 localtime 的返回值。

【讨论】:

  • 感谢您的回复,但在其他一些成员的帮助下,我们已将其本地化为 MPLAB 问题。显然嵌入式 C 库无法与计算机/系统通信。该代码在 Visual Studio 中运行良好。
猜你喜欢
  • 2022-01-19
  • 2018-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多