Подтвердить что ты не робот

Строковое представление time_t?

time_t seconds;
time(&seconds);

cout << seconds << endl;

Это дает мне временную метку. Как я могу получить эту дату эпохи в строку?

std::string s = seconds;

не работает

4b9b3361

Ответ 1

Попробуйте std::stringstream.

#include <string>
#include <sstream>

std::stringstream ss;
ss << seconds;
std::string ts = ss.str();

Хорошая обертка вокруг вышеупомянутого метода - Boost lexical_cast:

#include <boost/lexical_cast.hpp>
#include <string>

std::string ts = boost::lexical_cast<std::string>(seconds);

И для таких вопросов я увлекаюсь ссылкой String Formatters of Manor Farm от Herb Sutter.

UPDATE:

С С++ 11 используйте to_string().

Ответ 2

Попробуйте это, если вы хотите иметь время в читаемой строке:

#include <ctime>

std::time_t now = std::time(NULL);
std::tm * ptm = std::localtime(&now);
char buffer[32];
// Format: Mo, 15.06.2009 20:20:00
std::strftime(buffer, 32, "%a, %d.%m.%Y %H:%M:%S", ptm);  

Для получения дополнительной информации о strftime() проверьте cppreference.com

Ответ 3

Путь С++ - использовать stringstream.

Путь C - использовать snprintf() для форматирования числа:

 char buf[16];
 snprintf(buf, 16, "%lu", time(NULL));

Ответ 4

Верхний ответ здесь не работает для меня.

См. следующие примеры, демонстрирующие как ответ потока stringstream, так и lexical_cast, как было предложено:

#include <iostream>
#include <sstream>

int main(int argc, char** argv){
 const char *time_details = "2017-01-27 06:35:12";
  struct tm tm;
  strptime(time_details, "%Y-%m-%d %H:%M:%S", &tm);
  time_t t = mktime(&tm); 
  std::stringstream stream;
  stream << t;
  std::cout << t << "/" << stream.str() << std::endl;
}

Выход: 1485498912/1485498912 Найдено здесь


#include <boost/lexical_cast.hpp>
#include <string>

int main(){
    const char *time_details = "2017-01-27 06:35:12";
    struct tm tm;
    strptime(time_details, "%Y-%m-%d %H:%M:%S", &tm);
    time_t t = mktime(&tm); 
    std::string ts = boost::lexical_cast<std::string>(t);
    std::cout << t << "/" << ts << std::endl;
    return 0;
}

Выход: 1485498912/1485498912 Найдено: здесь


Второе решение с самым высоким рейтингом работает локально:

#include <iostream>
#include <string>
#include <ctime>

int main(){
  const char *time_details = "2017-01-27 06:35:12";
  struct tm tm;
  strptime(time_details, "%Y-%m-%d %H:%M:%S", &tm);
  time_t t = mktime(&tm); 

  std::tm * ptm = std::localtime(&t);
  char buffer[32];
  std::strftime(buffer, 32, "%Y-%m-%d %H:%M:%S", ptm);
  std::cout << t << "/" << buffer;
}

Выход: 1485498912/2017-01-27 06:35:12 Найдено: здесь


Ответ 5

Стандарт С++ не имеет собственных функций времени и даты - вам нужно использовать C localtime и связанные с ним функции.

Ответ 6

функция "ctime()" преобразует время в строку. Если вы хотите контролировать способ печати, используйте "strftime". Однако strftime() принимает аргумент "struct tm". Используйте "localtime()", чтобы преобразовать integer time_t 32 бит в struct tm.

Ответ 7

Существует множество способов, по которым вы можете отформатировать время (в зависимости от часового пояса, способа отображения его и т.д.), поэтому вы не можете просто неявно преобразовать time_t в строку.

C-способ - использовать ctime или использовать strftime плюс localtime или gmtime.

Если вам нужен более похожий на С++ способ выполнения преобразования, вы можете исследовать библиотеку Boost.DateTime.