Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 21.03.2015
Сообщений: 29

Мистика при работе с struct tm

21.03.2015, 15:43. Показов 920. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Столкнулся со странностью при работе с struct tm. Есть функция mysql_to_tm, переводящая строку формата mysql("0000-00-00 00:00:00") в структуру struct tm. И эта функция на одних и тех же входных данных выдаёт разные значения, а точнее теряется 1 час.
Сама функция:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
tm mysql_to_tm(string mysql, bool with_time)
{
  struct tm timeinfo;
 
  timeinfo.tm_year = atoi(mysql.substr(0, 4).c_str()) - 1900;
  timeinfo.tm_mon = atoi(mysql.substr(5, 2).c_str()) - 1;
  timeinfo.tm_mday = atoi(mysql.substr(8, 2).c_str());
  if (with_time)
  {
    timeinfo.tm_hour = atoi(mysql.substr(11, 2).c_str());
    timeinfo.tm_min = atoi(mysql.substr(14, 2).c_str());
    timeinfo.tm_sec = atoi(mysql.substr(17,2).c_str());
  }
  else
  {
    timeinfo.tm_hour = 0;
    timeinfo.tm_min = 0;
    timeinfo.tm_sec = 0;
  }
 
  cout<<"--------------------------------------"<<endl;
  cout<<mysql<<endl;
  cout<<time_to_mysql( mktime(&timeinfo))<<endl;
  cout<<"--------------------------------------"<<endl;
  return timeinfo;
};
В консоли можно увидеть следующее:
--------------------------------------
2015-01-01 00:00:00
2015-01-01 00:00:00
--------------------------------------
--------------------------------------
2015-12-31 00:00:00
2015-12-31 00:00:00
--------------------------------------
--------------------------------------
2015-03-01 00:00:00
2015-03-01 00:00:00
--------------------------------------
--------------------------------------
2015-03-01 00:00:00
2015-02-28 23:00:00
--------------------------------------
--------------------------------------
2015-03-01 00:00:00
2015-02-28 23:00:00
--------------------------------------
--------------------------------------
2015-01-01 00:00:00
2015-01-01 00:00:00
--------------------------------------
--------------------------------------
2015-12-31 00:00:00
2015-12-31 00:00:00
--------------------------------------
То есть на 3 обращении к функции всё нормально, а на 4 и 5 теряется 1 час. Логического объяснения я не смог найти. Подскажите пожалуйста в чём проблема.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.03.2015, 15:43
Ответы с готовыми решениями:

[Мистика, не думаю] Отказ в работе Win10
Всем доброго времени суток! Прошу, Вас, присесть поудобней, взять чаек или кофеек и насладиться моей проблемой))) Значит на днях...

Исключение при работе с pictureBox (задание картинки при работе с формой)
Хочу задать изображение в компоненте pictureBox во время разработки формы, чтоб при запуске проги сразу отображалась картинка. Задаю...

Необъяснимая мистика при наследовании класса
есть два класса: class AllData { protected: int id; int x; int y; public: AllData(int id=NULL, int x=NULL, int y=NULL) ...

2
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
21.03.2015, 15:50
В struct tm ещё есть поле tm_isdst, которое у тебя осталось неинициализированным. Я так понимаю, оно отвечает за учёт летнего/зимнего времени, и как раз в проблемных местах имеем разницу на час
1
0 / 0 / 0
Регистрация: 21.03.2015
Сообщений: 29
21.03.2015, 16:23  [ТС]
Добавил в вывод полей структуры
В консоли вот что:
--------------------------------------
2015-01-01 00:00:00
Y 115 M 0 D 1 H 0 M 0 S 0
2015-01-01 00:00:00
--------------------------------------
--------------------------------------
2015-12-31 00:00:00
Y 115 M 11 D 31 H 0 M 0 S 0
2015-12-30 23:00:00
--------------------------------------
--------------------------------------
2015-03-01 00:00:00
Y 115 M 2 D 1 H 0 M 0 S 0
2015-02-28 23:00:00
--------------------------------------
--------------------------------------
2015-03-01 00:00:00
Y 115 M 2 D 1 H 0 M 0 S 0
2015-02-28 23:00:00
--------------------------------------
--------------------------------------
2015-03-01 00:00:00
Y 115 M 2 D 1 H 0 M 0 S 0
2015-02-28 23:00:00
--------------------------------------
--------------------------------------
2015-01-01 00:00:00
Y 115 M 0 D 1 H 0 M 0 S 0
2014-12-31 23:00:00
--------------------------------------
--------------------------------------
2015-12-31 00:00:00
Y 115 M 11 D 31 H 0 M 0 S 0
2015-12-30 23:00:00
--------------------------------------

Эмм. Для меня этот результат ещё более странный тк теперь он теряет час во всех случаях кроме первого. Причём я даже не поверил в это сначала, подумал может быть я чего ещё поменял. Нет! Убрал строку вывода, перекомпилировал и вывод такой же как и выше:
--------------------------------------
2015-01-01 00:00:00
2015-01-01 00:00:00
--------------------------------------
--------------------------------------
2015-12-31 00:00:00
2015-12-31 00:00:00
--------------------------------------
--------------------------------------
2015-03-01 00:00:00
2015-03-01 00:00:00
--------------------------------------
--------------------------------------
2015-03-01 00:00:00
2015-02-28 23:00:00
--------------------------------------
--------------------------------------
2015-03-01 00:00:00
2015-02-28 23:00:00
--------------------------------------
--------------------------------------
2015-01-01 00:00:00
2015-01-01 00:00:00
--------------------------------------
--------------------------------------
2015-12-31 00:00:00
2015-12-31 00:00:00
--------------------------------------

Добавлено через 27 минут
Блин, не внимательно прочёл Ваше сообщение(
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.03.2015, 16:23
Помогаю со студенческими работами здесь

Мистика при установке WinXP на нетбук
Доброго времени суток. Столкнулся с такой проблемой. Имеется нетбук HP Mini с предустановленной ОС Win7 Basic. Знакомый попросил воткнуть...

Мистика при удалении из бинарного дерева поиска !
Привет народ !) Пытаюсь создать функцию удаления листа из бинарного дерева поиска : template&lt;typename NODETYPE&gt; void...

Мистика с Dell S2715H. При коннекте с ПК не видит HDMI, при коннекте с Андроид ТВ приставкой - все нормально
имеется глянцевый Dell S2715H 27 дюймов и видеокарта GTX970, все нормально работало, но вдруг монитор перестал видеть HDMI соединение...

Грабли при работе STM32f4 при работе с ftp
Столкнулся с такой проблемой. Работаю в связке Stm32f4+cinterion bgs2e8 при сливании файла с ftp, если в файле есть 0x00(NULL), а они...

Как открыть struct в struct
Здравствуйте, есть код, мне нужно узнать как можно открыть struct в struct, к примеру чтобы заполнить public string Osnv_Glagol; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru