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

IAR <time.h>, localtime, mktime

我正在为您的 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 中调试了代码,一切似乎都在那里工作。我错过了什么吗?

我想我自己找到了。正确的字符串是: :格林威治标准时间+1:格林威治标准时间+2:0100:032502+0:102502+0

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

验证夏令时跳转的一些测试:

//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);