time_t seconds;
time(&seconds);
cout << seconds << endl;
这给了我一个时间戳。如何将该纪元日期变为字符串?
std::string s = seconds;
不起作用
答案 0 :(得分:37)
#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);
对于这样的问题,我喜欢用Herb Sutter链接The String Formatters of Manor Farm。
更新:
使用C ++ 11,使用to_string()
。
答案 1 :(得分:26)
如果您希望将时间用在可读字符串中,请尝试此操作:
#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
答案 2 :(得分:3)
这里的最佳答案对我不起作用。
请参阅以下示例,演示如下所示的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 找到here
#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 找到:here
第二高评级解决方案在本地运作:
#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 找到:here
答案 3 :(得分:2)
C ++方式是使用stringstream。
C方式是使用snprintf()格式化数字:
char buf[16];
snprintf(buf, 16, "%lu", time(NULL));
答案 4 :(得分:1)
标准C ++没有自己的任何时间/日期函数 - 您需要使用C localtime及相关函数。
答案 5 :(得分:1)
函数“ctime()”会将时间转换为字符串。 如果要控制其打印方式,请使用“strftime”。但是,strftime()接受“struct tm”的参数。使用“localtime()”将time_t 32位整数转换为struct tm。
答案 6 :(得分:0)
您可能需要通过多种方式格式化时间(取决于时区,您希望如何显示它等),因此您不能简单地将time_t隐式转换为字符串。 / p>
C方式是使用ctime或使用strftime加上localtime或gmtime。
如果您想要更多类似C ++的方式来执行转换,可以调查Boost.DateTime库。
答案 7 :(得分:0)
localtime不适用于我。我用的是localtime_s:
struct tm buf;
char dateString[26];
time_t time = time(nullptr);
localtime_s(&buf, &time);
asctime_s(dateString, 26, &buf);
答案 8 :(得分:0)
这是我的格式化程序-欢迎发表评论。这个q似乎对将我带到一个我正在发布的帖子最有帮助,对于可能正在寻找相同名字的其他人。
#include <iostream>
#include "Parser.h"
#include <string>
#include <memory>
#include <ctime>
#include <chrono>
#include <iomanip>
#include <thread>
using namespace std;
string to_yyyyMMddHHmmssffffff();
string to_yyyyMMddHHmmssffffff() {
using namespace std::chrono;
high_resolution_clock::time_point pointInTime = high_resolution_clock::now();
std::time_t now_c = std::chrono::system_clock::to_time_t(pointInTime);
microseconds micros = duration_cast<microseconds>(pointInTime.time_since_epoch());
std::size_t fractional_microseconds = micros.count() % 1'000'000;
std:stringstream microstream;
microstream << "00000" << fractional_microseconds;
string formatted = microstream.str();
int index = formatted.length() - 6;
formatted = formatted.substr(index);
std::stringstream dateStream;
dateStream << std::put_time(std::localtime(&now_c), "%F %T") << "." << formatted;
formatted = dateStream.str();
return formatted;
}