如何在不使用数组的情况下将chrono :: time_point转换为字符串?

时间:2016-01-31 14:30:13

标签: c++ memory-management chrono

我发布了关于12天前将std :: chrono :: time_point转换为字符串并解决问题的问题。我要感谢你。

我使用以下代码解决了我的问题:

char no[15];
string test;

chrono::system_clock::time_point now = chrono::system_clock::now();
time_t now_c = chrono::system_clock::to_time_t(now);


strftime(no, sizeof(no), "%Y%m%d%I%M%S", localtime(&now_c));

test = no;

cout << test <<endl;

但是,我不喜欢这段代码,因为我不想使用数组。我想用这样的内存分配来解决我的问题;

char* no = new char();
string test;

chrono::system_clock::time_point now = chrono::system_clock::now();
time_t now_c = chrono::system_clock::to_time_t(now);


strftime(no, sizeof(no), "%Y%m%d%I%M%S", localtime(&now_c));

test = no;

cout << test <<endl;

delete[]no;

不幸的是这段代码不起作用。我认为有一种方法可以做到这一点,但我不知道如何。

如果有人选择我的错误或给我一个建议,我将非常感激。

感谢,

c00012

1 个答案:

答案 0 :(得分:1)

正如评论中所指出的,你对原始代码中固定常数(15)的依赖是脆弱的;使用常量在堆上分配内存不会使它不那么脆弱(事实上,你在额外的代码中写了一个bug)。

如果您要分配内存,请让标准库更安全地为您执行此操作:

#include <ctime>   
#include <chrono>  
#include <sstream> 

...

const auto now{std::chrono::system_clock::now()};
const auto now_{std::chrono::system_clock::to_time_t(now)};
// A stream into which to write it.
std::stringstream ss;    
ss << std::put_time(std::localtime(&now_), "%Y-%m-%d %X");

您的字符串现在应该可以通过ss.str()获得。