c ++ 11 chrono создает строку метки времени с форматированием даты, времени и миллисекунд - PullRequest
0 голосов
/ 03 мая 2018

Итак, у меня есть функция, созданная для генерации строк меток времени в форме:

"ГГГГ-ММ-ДД ЧЧ: ММ :: СС.ммм". Однако он использует части старых std :: time_t и std :: strftime (), std :: localtime () и т.д ...

std :: localtime выдает предупреждение о том, что это может быть небезопасно и использовать std :: localtime_s, однако MSVS, похоже, не имеет этой функции (или делает это!?) ... но в любом случае, что я хочу сделать попробуйте использовать только новые хронологические библиотеки.

Вот что у меня есть:

std::string get_time_stamp()
{
    char buf[50] = {0};

    // Get the current time
    auto now = std::chrono::system_clock::now();
    // Format the date/time
    std::time_t now_tm_t = std::chrono::system_clock::to_time(now);
    std::strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", std::localtime(&now_tm_t);
    // Get the milliseconds
    int millis = std::chrono::time_point_cast<std::chrono::milliseconds>(now).time_since_epoch().count() % 100;
    // Note use snprintf for gcc
    sprintf_s(buf + strlen(buf), sizeof(buf) - strlen(buf), ".%03d", millis);
    return buf;
}

Могу ли я сделать это чище и использовать только c ++ 11 chrono (и, возможно, не массив символов) и избегать таких функций, как strftime, localtime и т. Д ...? Я считаю, что использовать std :: chrono немного неудобно - простые вещи просты, но после этого они немного ошеломляют ...

...