ESP8266时区问题

时间:2019-06-02 07:03:39

标签: esp8266 arduino-esp8266

我在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();

然后我得到了适合我所在区域的时间,但这不正确

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

1 个答案:

答案 0 :(得分:0)

最后,几个小时后尝试了其他方法,这对我有用:

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();
}

这似乎是一个内部寄存器,但我不明白。而且每次芯片启动时我都要这样做。