2011-03-25 2 views
16

Я пытаюсь получить текущее время в виде строки в формате «YYYY-MM-DD-HH-MM-SS» в элегантном путь. Я могу взять текущее время в формате ISO из библиотеки «Время времени» Boost, но у нее есть другие строки разметки, которые не будут работать для меня (я использую это в имени файла). Конечно, я могу просто заменить разделительные строки, но есть ощущение, что есть лучший способ сделать это с помощью параметров форматирования даты и времени. Есть ли такой способ, и если да, то как я могу его использовать?Получение текущего времени в виде строки YYYY-MM-DD-HH-MM-SS

ответ

30

Используйте std::strftime, это стандарт C++.

#include <cstdio> 
#include <ctime> 

int main() 
{ 
    std::time_t rawtime; 
    std::tm* timeinfo; 
    char buffer [80]; 

    std::time(&rawtime); 
    timeinfo = std::localtime(&rawtime); 

    std::strftime(buffer,80,"%Y-%m-%d-%H-%M-%S",timeinfo); 
    std::puts(buffer); 

    return 0; 
} 
+0

Что-то, что пишет в 'std :: string' и, следовательно, не имеет никакого отношения к переполнению буфера, было бы неплохо. Понятно, что «strftime» будет иметь предсказуемую максимальную длину. Есть ли какие-то ошибки? –

+0

Есть ли какие-либо ** поточно-безопасные ** решения? См. [Link] (http://en.cppreference.com/w/cpp/chrono/c/localtime). Std :: localtime() не является потокобезопасным. – Yuri

2

Ответ зависит от того, что вы подразумеваете под этим вопросом. Если вы пытаетесь вывести форматированную строку времени, используйте strftime(). Если вы пытаетесь разобрать текстовую строку в двоичном формате, используйте strptime().