c - IAR <time.h>、本地时间、mktime

标签 c iar mktime localtime time.h

我正在为您的 IAR 编译器使用 DLib,并希望将 UTC 时间戳转换为本地时间戳。

我位于德国,因此我对 __getzone-method 的实现如下:

char const * __getzone() {
  return ":GMT+1:GMT+2:0100:(1980)032502+0:102503+0";
}

我写了一些测试代码:

time_t ts = 1509238797L;//29.10.2017-02:59:57 3 seconds before dst
struct tm* pre = localtime(&ts);

time_t after = ts + 5L;//wait 5 seconds -> 29.10.2017-02:00:02
struct tm* post = localtime(&after);

“pre”变量没问题,但“post”变量包含以下值: 29.10.2017-03:00:02 但应该是 29.10.2017-02:00:02。

我在 Visual-Studio 中调试了代码,一切似乎都在那里工作。我错过了什么吗?

最佳答案

我想我自己找到了。正确的字符串是: :GMT+1:GMT+2:0100:032502+0:102502+0

DST 在 2 点钟开始,在 2 点钟结束,而不是像我想的那样在 3 点钟。 我猜 api 描述不是很完美。

验证 DST 跳转的一些测试:

//Forward
time_t ts = 1490489997L;//26.03.2017-01:59:57 3 seconds before dst
struct tm* pre = localtime(&ts);

time_t after = ts + 5L;//wait 5 seconds -> 26.03.2017-03:00:02
struct tm* post = localtime(&after);

//Backward
time_t ts = 1509238797L;//29.10.2017-02:59:57 3 seconds before dst
struct tm* pre = localtime(&ts);

time_t after = ts + 5L;//wait 5 seconds -> 29.10.2017-02:00:02
struct tm* post = localtime(&after);

关于c - IAR <time.h>、本地时间、mktime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45076197/

相关文章:

c - 同一预处理器指令的值在一个文件中正确,但在另一个文件中错误

检查输入是否是C中的txt文件

c - 如何在调试时隐藏我的 C 库代码

c - 如何在 stm32f107 芯片上禁用/启用中断?

php - 使用 mktime 显示 2012 年的月份列表

c++ - 我可以在 C++ 中做一个多维字符数组吗?

C - 数组中的数组

c - MISRA C :2004, 移位错误

c - mktime 和 tm_isdst

c++ - 为什么 mktime 为我的 std::tm 返回 -1