В общем такая ситуация, есть ntp сервер который возвращает unix time для его нормального преобразования использую либу time.h и ее конструкцию tm_ и со временем все отлично оно верное (там не используется tm_ конструкция), но вот с датой твориться вообще черти что, да unix time точно правильный Вот часть кода unsigned long epochTime = timeClient.getEpochTime(); struct tm *ptm; ptm = localtime((time_t *)&epochTime); int monthDay = ptm->tm_mday; Serial.print("Month day: "); Serial.println(monthDay); int currentMonth = ptm->tm_mon+1; Serial.print("Month: "); Serial.println(currentMonth); int currentYear = ptm->tm_year+1900; Serial.print("Year: "); Serial.println(currentYear); C unsigned long epochTime = timeClient.getEpochTime(); struct tm *ptm; ptm = localtime((time_t *)&epochTime); int monthDay = ptm->tm_mday; Serial.print("Month day: "); Serial.println(monthDay); int currentMonth = ptm->tm_mon+1; Serial.print("Month: "); Serial.println(currentMonth); int currentYear = ptm->tm_year+1900; Serial.print("Year: "); Serial.println(currentYear); И вот что я получаю в ответе 01:49:40.213 -> Month: 8 01:49:40.213 -> Year: 3166534 01:49:40.213 -> Epoch Time: 1730512179 01:49:51.067 -> Month day: 14 01:49:51.067 -> Month: 10 01:49:51.067 -> Year: 4642425 01:49:51.067 -> Epoch Time: 1730512190 01:50:01.923 -> Month day: 20 01:50:01.923 -> Month: 6 01:50:01.923 -> Year: -5640088 01:50:01.923 -> Epoch Time: 1730512201 Код 01:49:40.213 -> Month: 8 01:49:40.213 -> Year: 3166534 01:49:40.213 -> Epoch Time: 1730512179 01:49:51.067 -> Month day: 14 01:49:51.067 -> Month: 10 01:49:51.067 -> Year: 4642425 01:49:51.067 -> Epoch Time: 1730512190 01:50:01.923 -> Month day: 20 01:50:01.923 -> Month: 6 01:50:01.923 -> Year: -5640088 01:50:01.923 -> Epoch Time: 1730512201 Это даже нельзя списать на какое то смещение там, это просто какие то рандомные абсолютно значения, я даже не понимаю что происходит
Привет, Экстази! Давай попробуем разобраться в этой ситуации. Судя по твоему описанию и коду, проблема может заключаться в неправильной интерпретации указателя на `epochTime`. Давай посмотрим на это подробнее. В твоем коде ты используешь `localtime`, чтобы преобразовать `epochTime` в структуру `tm`. Однако, ты передаешь указатель на `epochTime`, который является `unsigned long`, в функцию `localtime`, которая ожидает указатель на `time_t`. Это может вызвать некорректное поведение, так как `unsigned long` и `time_t` могут иметь разные размеры на разных платформах. Попробуй изменить строку: ptm = localtime((time_t *)&epochTime); C ptm = localtime((time_t *)&epochTime); на: time_t rawtime = (time_t)epochTime; ptm = localtime(&rawtime); C time_t rawtime = (time_t)epochTime; ptm = localtime(&rawtime); Это должно помочь избежать проблем с типами данных. Попробуй это изменение и посмотри, изменится ли результат. Если проблема останется, дай знать, и мы продолжим разбираться!