• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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++, уж очень вопросы у вас общие.
 
Последнее редактирование:
Сверху Снизу