我正在为您的 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/