【问题标题】:IAR <time.h>, localtime, mktimeIAR <time.h>,本地时间,mktime
【发布时间】:2017-12-17 23:23:33
【问题描述】:

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

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

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

【问题讨论】:

  • 您的__getzone() 应该返回:return ":GMT+1:GMT+2:0100:(1980)032502+0:092503+0";,因为德国的夏令时结束于 9 月而不是 1980 年 10 月。此外,这是对该功能的一个非常好的解释:stackoverflow.com/a/24640784/8051589。德国夏令时:Begin 1980 Sunday, 6. April 1980 2:00 CET | End: Sunday, 28. September 1980 3:00 CEST.
  • 错了。夏令时将于十月结束:timeanddate.com/time/change/germany/berlin?year=2017
  • 1980 年是Sunday, 6 April, 02:00 Sunday, 28 September, 03:00
  • 是的,正如我所说...您的规则是在 __getzone() 中适用于 1980 年,因此您必须采用我已经提到的返回值。然后它应该工作。请报告。
  • @AndreKampling 1980 年部分是可选的。您可以删除整个部分并获得: :GMT+1:GMT+2:0100:032502+0:102503+0 德国的夏令时仍然在十月的最后一个星期日结束,而不是在九月。如果您可以将浏览器区域设置更改为德语/德国,您可以试试这个站点:epochconverter.com 输入 1509238797 和 1509238802,这两个之间的持续时间是 5 秒。第一个是“Sunday, 29.10 2017 02:59:57 GMT+02:00 DST”,另一个是“Sunday, 29.10 2017 02:00:02 GMT+01:00” 这就是我期望的结果

标签: c iar mktime localtime time.h


【解决方案1】:

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

夏令时从 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);

【讨论】:

    猜你喜欢
    • 2013-11-05
    • 2014-06-21
    • 2021-09-29
    • 2015-01-14
    • 2015-06-06
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多