Отметка времени в формате [чч: мм: сс: msms] C ++ - PullRequest
0 голосов
/ 20 июня 2020

Я хотел написать небольшой l oop, который печатает метки времени в этом формате [чч: мм: сс: мсмс]. В лучшем случае это будет отдельная функция. Спасибо за ответ

1 Ответ

0 голосов
/ 20 июня 2020

Если вам нужен этот формат c, единственный известный мне способ - это самостоятельно проанализировать время, прошедшее со счетчика эпох (или получить формат времени по умолчанию, как показано ниже, проанализировать все его элементы и переставить их самостоятельно в другая строка).

Между тем, вы можете сделать это в формате по умолчанию, подобном этому (включая ctime и chrono)

auto t = std::chrono::system_clock::now();
auto ptr = std::chrono::system_clock::to_time_t(t);
char time[255];
auto frm = ctime_s(time, 255, &ptr);
printf("%s\n", time);
getchar();

Вывод:

Sat Jun 20 07:28:36 2020

Изменить:

Я нашел способ сделать это с помощью стандартных функций:

char timestamp[50]{ 0 };
std::time_t time = std::time(nullptr);
std::strftime(timestamp, 30, "[%H:%M:%S]", std::localtime(&time));

К сожалению, я не верю, что существует стандартный способ получить текущее количество миллисекунды, возможно, потому, что ОС не отслеживает это.

Когда вы видите отметки времени в программах других людей, миллисекунды, вероятно, подсчитываются ими (но я могу ошибаться).

Если вы хотите сделать это, вы можете получить количество миллисекунд (с эпохи или с момента запуска ОС, в зависимости от того, какую функцию вы используете) в начале программы, а затем каждый раз, когда вы вычисляете временную метку, возьмите его снова и вычтите из него исходный.

Допустим, вы используете Windows, вы можете сделать это:

// Get the initial tick
unsigned int starttick = GetTickCount();
... Do your stuff here
// Get the current tick:
unsigned int stoptick = GetTickCount();
// Subtract current tick from start tick to get elapsed milliseconds (roughly)
printf("%d", (stoptick - starttick));

Или вы можете использовать Chrono:

auto s = std::chrono::high_resolution_clock::now();
Sleep(1500);
auto st = std::chrono::high_resolution_clock::now();
auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(st - s).count();
printf("%lld", ms);
getchar();
...