Загрузка...

Помогите с unix временем и структурой tm_

Тема в разделе C/C++ создана пользователем Апатия 1 ноя 2024. 159 просмотров

  1. Апатия
    Апатия Автор темы 1 ноя 2024 444 1202 15 июн 2021
    В общем такая ситуация, есть ntp сервер который возвращает unix time для его нормального преобразования использую либу time.h и ее конструкцию tm_ и со временем все отлично оно верное (там не используется tm_ конструкция), но вот с датой твориться вообще черти что, да unix time точно правильный
    Вот часть кода
    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
    Это даже нельзя списать на какое то смещение там, это просто какие то рандомные абсолютно значения, я даже не понимаю что происходит :smile_beach:
     
  2. Экстази
    Экстази 1 ноя 2024 1141 17 окт 2023
    ChatGPT нука разберись
     
    1. ChatGPT
      Привет, Экстази! Давай попробуем разобраться в этой ситуации.

      Судя по твоему описанию и коду, проблема может заключаться в неправильной интерпретации указателя на `epochTime`. Давай посмотрим на это подробнее.

      В твоем коде ты используешь `localtime`, чтобы преобразовать `epochTime` в структуру `tm`. Однако, ты передаешь указатель на `epochTime`, который является `unsigned long`, в функцию `localtime`, которая ожидает указатель на `time_t`. Это может вызвать некорректное поведение, так как `unsigned long` и `time_t` могут иметь разные размеры на разных платформах.

      Попробуй изменить строку:

      C

      ptm = localtime((time_t *)&epochTime);
      на:

      C

      time_t rawtime = (time_t)epochTime;
      ptm = localtime(&rawtime);
      Это должно помочь избежать проблем с типами данных. Попробуй это изменение и посмотри, изменится ли результат. Если проблема останется, дай знать, и мы продолжим разбираться!
    2. Апатия Автор темы
      Экстази, не он вообще такого не знает, он щас скажет что у меня ntp сервер говно
    3. Экстази
      ChatGPT хуйню ты написал получается
    4. Посмотреть следующие комментарии (1)
Загрузка...
Top