Squeak.ru - шаблоны программирования

С++ mktime возвращает случайные даты

Я пытаюсь преобразовать строку даты в time_t, но mktime() возвращает случайные даты:

string datetime = "2014-12-10 10:30";
struct tm tmInfo;
strptime(datetime.c_str(), "%Y-%m-%d %H:%M", &tmInfo);
tmInfo.tm_isdst = 0;
time_t eventTime = mktime(&tmInfo);

eventTime варьируется от 1970-х до 2030-х годов. Структура tmInfo содержит правильную дату, поэтому ошибка должна происходить в mktime(). Любые идеи о том, что происходит не так?

08.12.2014

  • Кажется, работает на меня. eventTime получается как 1418203800, что примерно соответствует действительности. 08.12.2014

Ответы:


1

Вам необходимо правильно инициализировать нулями все остальные поля экземпляра struct tm перед вызовом strptime(), поскольку он не обязательно инициализирует каждое поле. Из strptime() спецификации POSIX:

Не указано, будут ли множественные вызовы strptime() с использованием одной и той же структуры tm обновлять текущее содержимое структуры или перезаписывать все содержимое структуры. Соответствующие приложения должны сделать один вызов strptime() с форматом и всеми данными, необходимыми для полного указания даты и времени преобразования.

Например, этого должно быть достаточно:

struct tm tmInfo = {0};
08.12.2014
  • Предварительная настройка tmInfo на { 0 } сработала, спасибо! Я принял ваш ответ из-за объяснения. 08.12.2014

  • 2

    Вы должны заранее инициализировать структуру до 0 или также ввести секунды:

    string datetime = "2014-12-10 10:30";
    struct tm tmInfo = { 0 };
    strptime(datetime.c_str(), "%Y-%m-%d %H:%M", &tmInfo);
    

    or

    string datetime = "2014-12-10 10:30:00";
    struct tm tmInfo;
    strptime(datetime.c_str(), "%Y-%m-%d %H:%M:%S", &tmInfo);
    
    08.12.2014
  • Предварительная настройка tmInfo на { 0 } сработала, спасибо! 08.12.2014
  • О мой Бог! Наконец-то я нашел этот ответ, большое спасибо! Я столкнулся с той же проблемой! Столько головной боли... 20.04.2019

  • 3

    Приведенный ниже код будет работать, если вам нужно текущее системное время в формате

     time_t current_time;
     struct tm *loctime;
    
     memset(buffer,0,strlen(buffer));
     current_time = time(NULL);
     loctime = localtime(&current_time);
     strftime(buffer,250,"--> %d/%m/%y  %H:%M:%S",loctime);
    
    08.12.2014
    Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...