2011-03-25 11 views
16

Sto cercando di ottenere l'ora corrente come una stringa formattata "YYYY-MM-DD-HH-MM-SS" in un elegante modo. Posso prendere l'ora corrente in formato ISO dalla libreria "Date Time" di Boost, ma ha altre stringhe di delimitazione che non funzioneranno per me (sto usando questo in un nome di file). Ovviamente posso solo sostituire le stringhe delimitanti, ma ho la sensazione che ci sia un modo migliore per farlo con le opzioni di formattazione date-time. C'è un modo, e se sì, come posso usarlo?Ottenere l'ora corrente come una stringa YYYY-MM-DD-HH-MM-SS

risposta

30

Utilizzare std::strftime, è standard 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

Qualcosa che scrive in uno 'std :: string' e quindi non ha preoccupazioni circa il buffer overflow sarebbe bello. Comprensibilmente, 'strftime' dovrebbe avere una lunghezza massima prevedibile. Ci sono trucchi? –

+0

Esiste una soluzione ** thread-safe **? Vedi [link] (http://en.cppreference.com/w/cpp/chrono/c/localtime) - std :: localtime() non è thread-safe. – Yuri

2

La risposta dipende da cosa intendi per ottenere e prendere. Se stai provando ad emettere una stringa di tempo formattata, usa strftime(). Se stai cercando di analizzare una stringa di testo in un formato binario, usa strptime().

Problemi correlati