Как добавить системное время к строке?
Мой ответ - построить функцию удобства.
Если вам действительно нужен только час, минута, секунда, вам не нужно использовать относительно медленное местное время(). (с другой стороны, если вам нужно больше, я думаю, вы должны предпочесть localtime_r() для преобразования).
Для встроенной системы несколько контрактов назад, я нашел, что это преобразование является относительно медленной функцией и выбрало его. Алгоритмы обработки прыжков, веков и т. Д. Кажутся достаточно простыми. Я подозреваю, что считаю это медленным, потому что он вычисляет больше, чем мне нужно в этом приложении, которое пыталось выполнить преобразование много раз в секунду.
Существует более простой (и, вероятно, еще более быстрый) подход с использованием модульной арифметики. Он начинается тем же самым - со временем (0) (и, следовательно, я подозреваю, что то, что я здесь делаю, «скрыто» в функции localtime_r()). Сторона примечания 1 - на моей старой Dell, работающей под управлением Ubuntu 15.10, время (0) - это самый быстрый доступ к настенным часам, измеряющий около 6 или 7 нс «типичной» продолжительности. Сторона примечания 2 - time_t может измениться когда-нибудь. «Статья статьи Time_t Wikipedia проливает свет на это. Суть в том, что тип time_t не гарантируется в спецификации C».
Код настоящее время я использую, чтобы удобно генерировать штамп времени строку:
std::string hhCmmCssGet(time_t tt = 0) // tt has default value
{
time_t now = (tt ? tt : time(0));
static time_t prev = 0;
static char hhmmss[] = "hh:mm:ss";
if (prev != now)
{
prev = now;
const int32_t CST = -6;
int64_t hr = ((now/3600) % 24) + CST; // hr of day, CST offset
if (hr < 0) hr += 24;
uint64_t min = ((now/60) % 60); // min of day
uint64_t sec = (now % 60); // sec of day
std::stringstream ss;
ss << std::dec
<< std::setfill('0') << std::setw(2) << hr << ":"
<< std::setfill('0') << std::setw(2) << min << ":"
<< std::setfill('0') << std::setw(2) << sec;
for (size_t i=0; i<8; i++) // transfer new value
hhmmss[i] = ss.str()[i]; // into static hhmmss
}
std::string retVal(hhmmss);
return(retVal);
}
Статичные элементы и «если (! Пред = сейчас)» положение, позволяют эту функцию, которая будет вызвана тысячи раз в секунду ... с гораздо меньшими усилиями. Второй, в конце концов, только обновления 1ce в секунду. И обратите внимание, что данные std :: stringstream и модульные арифметические операции выполняются только 1 раз в секунду.
Посмотрите на strftime, http://www.tutorialspoint.com/c_standard_library/c_function_strftime.htm –