2016-05-02 1 views
-1

Je dois écrire des fichiers avec la date actuelle incluse dans le nom. À l'heure actuelle ce que j'ai essayé:Définir la chaîne comme date du jour

time_t t = time(0); 
    struct tm * now = localtime(&t); 
    string date=now->tm_mday+'/'+(now->tm_mon+1)+'/'+(now->tm_year+1900); 

De préférence, je voudrais essayer de garder cette méthode pour obtenir la date comme je l'ai utilisé plus tôt dans mon programme.

+3

Et la problème avec c'est? –

+4

Utilisez ['std :: ostringstream'] (http://en.cppreference.com/w/cpp/io/basic_ostringstream). '+ 'ne fonctionne pas comme vous le pensez. –

+0

@BenjaminBannier j'ai essayé de l'imprimer et c'est juste un symbole E –

Répondre

5

J'utiliser std::put_time, quelque chose comme ceci:

time_t t = time(0); 
struct tm * now = localtime(&t); 

your_file << std::put_time(now, "%d/%m/%Y"); 

Si vous voulez dire que vous devez inclure la date dans le nom d'un nouveau fichier, puis écrire à un stringstream et utiliser your_stream.str() pour obtenir un chaîne contenant la valeur.

Si (bien que cela me semble peu probable) vous trouvez que cela impose des frais généraux excessifs, vous pouvez utiliser strftime à la place. Il écrit une date/heure directement à une chaîne C-style:

char buffer[64]; 

strftime(buffer, sizeof(buffer), "%d/%m/%Y", now); 
+0

Désolé, je me rends compte que je n'étais pas très clair. Ce que j'essaie de faire, c'est écrire le nom du fichier avec la date dedans. Pour cela, je dois être en mesure de l'avoir comme une chaîne. –

2

Je l'ai souvent utilisé std::strftime un peu comme ceci:

// use strftime to format time_t into a "date time" 
std::string get_date(std::time_t timer) 
{ 
    char buf[sizeof("02/05/2015")]; // big enough for 02/05/2015\0 
    std::tm tp = *std::localtime(&timer); // not thread safe 
    return {buf, std::strftime(buf, sizeof(buf), "%d/%m/%Y", &tp)}; 
} 

int main() 
{ 
    std::cout << get_date(std::time(0)) << '\n'; 
} 

Sortie:

02/05/2016