2014-02-05 2 views
0

Можно ли конвертировать ltm->tm_mday в строку, пожалуйста?Как преобразовать тип time_t в строку в C++?

Я пробовал это, но это не сработало!

time_t now = time(0); 
tm *ltm = localtime(&now); 
String dateAjoutSysteme = ltm->tm_mday + "/" + (1 + ltm->tm_mon) + "/" + (1900 + ltm->tm_year) + " " + (1 + ltm->tm_hour) + ":" + (1 + ltm->tm_min) + ":" + (1 + ltm->tm_sec); 
+0

Проверьте 'strftime()'. Не уверен, есть ли еще способ C++ ish. – TypeIA

+4

C++ 11: 'std :: stringstream buf; buf << std :: put_time (ltm, «% d /% m /% I:% M:% S); std :: string date = buf.str()' – 0x499602D2

ответ

1

Я не совсем уверены, что это лучший способ сделать это , но он работает:

#include <time.h> 
#include <string> 
#include <sstream> 
#include <iostream> 
int main() { 
    time_t now = time(0); 
    tm *ltm = localtime(&now); 
    std::stringstream date; 
    date << ltm->tm_mday 
     << "/" 
     << 1 + ltm->tm_mon 
     << "/" 
     << 1900 + ltm->tm_year 
     << " " 
     << 1 + ltm->tm_hour 
     << ":" 
     << 1 + ltm->tm_min 
     << ":" 
     << 1 + ltm->tm_sec; 
    std::cout << date.str() << "\n"; 
} 

Функция strftime() будет выполнять большую часть этого работа для вас, но создание частей строки с использованием stringstream может быть более полезным.

+0

Хорошо, спасибо, тогда как я могу преобразовать «date» в str :: string? – user3264174

+0

@ user3264174, Посмотрите в ответ. – chris

+0

@ user3264174: Метод 'str()' возвращает строку 'std :: string' из' std :: stringstream'. –

1

Вы можете конвертировать time_t либо с использованием комплекса strftime, либо просто asctime функции для char массива, а затем использовать соответствующие std::string конструктор. Простого пример:

std::string time_string (std::asctime (timeinfo))); 

Edit:

Специально для вашего кода, ответ был бы:

std::time_t now = std::time(0); 
tm *ltm = std::localtime(&now); 
char mbstr[100]; 
std::strftime(mbstr, 100, "%d/%m/%Y %T", std::localtime(&t)); 
std::string dateAjoutSysteme (mbstr); 
+0

Можете ли вы, просто выполните мой пример. , Я не мог понять, что вы сказали:/ – user3264174

+0

Вы имеете в виду 'std :: asctime', а не' asctime'? –

+0

@KeithThompson Сначала я подумал о простом 'asctime', но, похоже, для C++ лучше писать' std :: 'one. – Predelnik

Смежные вопросы