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