Обновление для перехода на летнее время "ConfigTime"

Я использую ESP8266 для синхронизации часов NTP таким образом:

void myIOT2::_startNTP(const int gmtOffset_sec, const int daylightOffset_sec, const char *ntpServer)
{
    configTime(gmtOffset_sec, daylightOffset_sec, ntpServer); //настройка смещения по времени и сервера NTP
    while (now() < 1627735850)                                /* while in 2021 */
    {
        delay(20);
    }
    delay(100);
}

Но теперь, когда переход на летнее время закончился 31/10/2021, какой код "флагов", который теперь переходит на летнее время, закончился, и 3600 секунд нужно уменьшить (или добавить) ?

в моем случае gmtOffset_sec=2*3600 и daylightOffset_sec=1*3600 NtpServer="pool.ntp.org"

, 👍-1

Обсуждение

SDK настраивается автоматически. Я использую только `configTime(TZ_Europe_Bratislava, "pool.ntp.org"); Константы TZ находятся в TZ.h в ядре esp8266, @Juraj

@Juraj Я предполагаю, что "TZ_Europe_Bratislava" инкапсулирует такие же константы, как и у меня. Но все равно моя синхронизация времени не обновилась, @Guy . D

информация о DST не поступает с сервера NTP. мои часы esp8266 изменили время с 3 до 2 часов ночи, но они синхронизируются с NTP только один раз в день, @Juraj

@Juraj Я использовал свою константу TZ, и она сработала, как вы сказали. Не могли бы вы объяснить, пожалуйста, почему мой метод не сработал должным образом?, @Guy . D

@Juraj Что мне делать в ESP32 ?, @Guy . D

@Juraj NTP не был сдвинут по мере необходимости, @Guy . D

@Juraj TNX, и это относится к моему вопросу об ESP32 ( поскольку "TZ.h "принадлежит" ESP8266.h"), @Guy . D

esp32 имеет функцию configTzTime для часового пояса. в нем отсутствует файл TZ.h. вы можете скопировать файл TZ.h или только строку с определением зоны для вашего часового пояса., @Juraj

Для справки: https://github.com/esp8266/Arduino/blob/14c3798d4ff959254599f2904579412acba3f175/cores/esp8266/TZ.h#L338, @Nick Bolton


1 ответ


1

Подведение итогов комментариев @juraj

  1. вместо определения UTC+x и смещения дневного света вместо этого используйте NTZ.

  2. В то время как ESP8266 имеет `TZ.h в качестве части своего ядра, я использовал соответствующий TZ, как показано на рисунке.

  3. для ESP32: a) замените на configTzTime, как показано на рисунке. б) Скопируйте соответствующий TZ из TZ.h для текущей библиотеки и используйте следующим образом.

для ESP8266: configTime(TZ_Asia_Jerusalem, ntpServer);

для ESP32: configTzTime(TZ_Asia_Jerusalem, NtpServer); // Значение Tz было скопировано в код

,