2016-05-02 5 views
-1

Мне нужно написать файлы с текущей датой, включенной в это имя. В настоящее время это то, что я пробовал:Установить строку как текущую дату

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

Предпочтительно я хотел бы, чтобы этот метод получения даты, как я использовал его раньше в моей программе.

+3

И проблема с этим? –

+4

Используйте ['std :: ostringstream'] (http://en.cppreference.com/w/cpp/io/basic_ostringstream). '+' не работает, как вы думаете. –

+0

@BenjaminBannier я попробовал распечатать его и его просто символ E –

ответ

5

Я хотел бы использовать std::put_time, что-то вроде этого:

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

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

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

Если (хотя это кажется мне маловероятным), вы обнаружите, что накладывает чрезмерные накладные расходы, вместо этого вы можете использовать strftime. Он пишет дату/время, непосредственно в строку C-стиль:

char buffer[64]; 

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

Извините, я понимаю, что я был не очень ясен. То, что я на самом деле пытаюсь сделать, это записать имя файла с датой в нем. Для этого мне нужно иметь его как строку. –

2

Я часто используется std::strftime немного как это:

// 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'; 
} 

Выход:

02/05/2016