我在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();
然后我得到了适合我所在区域的时间,但这不正确
正如我所说,可能我缺少了一些东西,但是在所有示例中,我看到的都是相同的东西。欢迎任何提示。
答案 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();
}
这似乎是一个内部寄存器,但我不明白。而且每次芯片启动时我都要这样做。