Сьогодні я зіткнувся з проблемою що коли переводять годинник мої Arduino пристрої починають показувати неточний час і я знайшов рішення цієї проблеми
Код
#include <NTPClient.h>
#include <WiFiUdp.h>
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "ua.pool.ntp.org", 7200);
void initTime() {
  // Встановлюємо початкове значення літнього часу на false
  bool isDaylightSaving = false;
  // Отримуємо поточну дату та час з сервера NTP
  timeClient.begin();
  timeClient.update();
  String formattedTime = timeClient.getFormattedTime();
  // Розбиваємо рядок з форматованим часом на складові
  int day, month, year, hour, minute, second;
  sscanf(formattedTime.c_str(), "%d-%d-%d %d:%d:%d", &year, &month, &day, &hour, &minute, &second);
  // Перевіряємо, чи поточний місяць знаходиться в інтервалі березень-жовтень
  if (month > 3 && month <= 10) {
    // Якщо так, встановлюємо літній час на true
    isDaylightSaving = true;
  }
  // Встановлюємо зміщення часового поясу для врахування літнього часу
  if (isDaylightSaving) {
    timeClient.setTimeOffset(14400); // UTC+3 для України
  } else {
    timeClient.setTimeOffset(10800); // UTC+2 для України
  }
}
void setup() {
  // Підключення до WiFi і налаштування часу
  ...
  initTime();
}
void loop() {
  // Оновлюємо час з сервера NTP
  timeClient.update();
  // Решта коду для програми
  ...
}Тестовано на esp32.