• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

конвертация значения во время time.h

YaSerg

New member
Добрый день!

У меня в программе при старте записывается значение текущего времени в миллисекундах.
В процессе требуется вывести значение когда был запущен контроллер в стандартном временном формате. Подскажите библиотека time.h умеет конвертировать значение из миллисекунд в стандартный формат не сбив при этом счет текущего времени?
 

nikolz

Well-known member
Добрый день!

У меня в программе при старте записывается значение текущего времени в миллисекундах.
В процессе требуется вывести значение когда был запущен контроллер в стандартном временном формате. Подскажите библиотека time.h умеет конвертировать значение из миллисекунд в стандартный формат не сбив при этом счет текущего времени?
круто. А где это у Вас идет счет текущего времени в стандартном формате? И о каком стандартном формате Вы спрашиваете?
 

YaSerg

New member
круто. А где это у Вас идет счет текущего времени в стандартном формате? И о каком стандартном формате Вы спрашиваете?
Время в которое был запущен контроллер записывается в переменную в миллисекундах, к примеру 1547986020 что в стандартном формате 12-07 20\1\2019
Стандартный формат чч:мм день\месяц\год
 

YaSerg

New member
@YaSerg откуда вы берете текущее время? Если речь про esp, то смотрите другую библиотеку. Например https://esp8266.ru/forum/threads/ntpclient-h-voprosy-novichka.3844
В этой теме я подробно расписал, как понять что библиотека делает.

Вы видимо вопроса не поняли, глубже вникнув в тему написал сам функцию конвертации, может кому пригодится:

Код:
// TimeCovert Function
String TimeCovert(uint32_t lasttime)
{
lastStartTime="";
uint8_t lasthour = lasttime/86400000;
if (lasttime > 86400000) {
lastStartTime = lastStartTime + lasthour  + " дней ";
lasttime = lasttime - (86400000*lasthour);
}
int time=lasttime/1000;
if (time/60/60<10) { lastStartTime = lastStartTime + "0"; }
lastStartTime = lastStartTime + (time/60/60);
lastStartTime = lastStartTime + ":";
if (time/60%60<10) { lastStartTime = lastStartTime + "0"; }
lastStartTime = lastStartTime + ((time/60)%60);
lastStartTime = lastStartTime + ":";
if (time%60<10) { lastStartTime = lastStartTime + "0"; }
lastStartTime = lastStartTime +  (time%60);
return lastStartTime;
}
 

YaSerg

New member
Подскажите а есть в этой библиотеке возможность получить значение времени в стандартном формате в переменную или вывести в Serial?
 

nikolz

Well-known member
Время в которое был запущен контроллер записывается в переменную в миллисекундах, к примеру 1547986020 что в стандартном формате 12-07 20\1\2019
Стандартный формат чч:мм день\месяц\год
рекомендую посмотреть форматы даты в винде. Там нет понятия "стандартный формат" тем более единственный.
Если Вы имеете ввиду функции для работы с датой и временем в стандартной библиотеки С/C++ (ссылаетесь time.h) то там есть структура tm и ряд функций для работы с датой и временем
например asctime(), ctime() и есть понятие вывод строки дата.время по формату. Тоже нет понятия "стандартный формат"
 

YaSerg

New member
А именно:
1) есть ли тут ф-ции PaulStoffregen/Time
позволяющие получить в переменную вывести текущее время и дату в определенном формате.
2) есть ли тут ф-ция позволяющая из секунд преобразовать значение во время и дату.
 

YaSerg

New member
тут - это где? Вы же сами нашли библиотеку для преобразования время-строка, там есть. Тут нет.
Не хватает мне пока ума разобраться как работают ф-ции и как правильно их вызвать.
Могу предположить, что это строка breakTime(time_t time, tmElements_t &tm);
Её так прямо можно вызвать в скетче breakTime(time_t time, tmElements_t &tm);?
Я так понял в место time_t time нужно подставить время в секундах, а остальные значения как использовать, подскажите пожалуйста.
 

Сергей_Ф

Moderator
Команда форума
@YaSerg вы библиотеку установите и в разделе Примеры в АрдуиноИДЕ появяться примеры для неё. Там и посмотрите как вызывать и что.
Либо посмотрите на GitHab в папке examples библиотеки
 

YaSerg

New member
@YaSerg вы библиотеку установите и в разделе Примеры в АрдуиноИДЕ появяться примеры для неё. Там и посмотрите как вызывать и что.
Либо посмотрите на GitHab в папке examples библиотеки
Использование ф-ции breakTime в примерах нет (
 

Сергей_Ф

Moderator
Команда форума
Её так прямо можно вызвать в скетче breakTime(time_t time, tmElements_t &tm);
Так вызвать, конечно нельзя.
Вы должны объявить свою переменную типа tmElements_t и подставить адрес этой переменной (или указатель на нее) в качестве второго аргумента.
Типа
Код:
tmElements_t myTimeElements;
breakTime( myTime, &myTimeElements);
После вызова функции поля структуры myTimeElements будут заполнены вашими данными в соответствии со значением myTime.
Вам стоит почитать про C++, уж очень вопросы у вас общие.
 
Последнее редактирование:
Сверху Снизу