ESP8266 时区问题

ESP8266 Timezone issues

我在 esp8266 中遇到一些时区问题

我配置的时区超过了 8 小时。我认为这是我代码中的错误。

经过一些测试,我发现问题从一开始就出现了

    void setup() {

      if(ESP.getResetReason() != "Power on") {
         WiFi.mode(WIFI_OFF);
      }  
      Serial.begin(115200); 

      pinMode(PIN_RESETTODEFAULT,INPUT_PULLUP);
         time_t now;
         unsigned int currentime=time(&now);
         struct tm *timeinfo = localtime(&now);
         Serial.printf("HH:MM1: %d-%d-%d %d:%d:%d\r\n",timeinfo->tm_mday,timeinfo->tm_mon,timeinfo->tm_year,timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec);

此代码返回我:

08:51:17.031 -> SDK:2.2.1(cfd48f3)/Core:2.4.2/lwIP:2.0.3(STABLE-2_0_3_RELEASE/glue:arduino-2.4.1-13-g163bb82)/BearSSL:6d1cefc
08:51:17.066 -> HH:MM1: 1-0-70 8:0:0
08:51:17.066 -> 

如果我使用 ConfigTime 从互联网设置小时,即使我正确设置了时区,问题仍然存在。

它看起来像一个内部设置问题,一个寄存器中的值或类似的东西,但我不明白,但我这样做是为了正确配置它,我还是得到了那 8 个额外的时间:

configTime(0, 0, "pool.ntp.org", "time.nist.gov"); 
setenv("TZ", "CET-1CEST,M3.5.0,M10.5.0/3", 0);  

我正在尝试重置内部寄存器

configTime(0, 0, NULL, NULL, NULL);
setenv("TZ", "", 0);
tzset();

然后我为我的区域找到了正确的时间,但这是不正确的

正如我所说,可能我遗漏了一些东西,但在所有示例中我看到了相同的东西。欢迎任何提示。

最后,经过几个小时尝试不同的东西,这对我有用:

void InitTimeZone()
{
  struct timezone tz={0,0};
  struct timeval tv={0,0};
  settimeofday(&tv, &tz);  
  setenv("TZ", "CET-1CEST,M3.5.0,M10.5.0/3", 0);
  tzset();
}

好像是一个内部寄存器,但我不明白。每次芯片启动时我都必须这样做。