如何将字符串与chrono::milliseconds连接起来?

7

我需要一个包含时间戳毫秒的字符串。我在这里查找后得到了毫秒。

milliseconds ms = duration_cast< milliseconds >(
    system_clock::now().time_since_epoch()
);

现在我需要像这样连接它:
string = "something " + ms + " something else";

需要帮忙吗? 提前感谢您的帮助 :)

2个回答

17
您需要一种将ms转换为字符串的方法。标准库提供了std::to_string(),但它不能直接用于持续时间的转换。要将持续时间转换为可使用to_string()的整数类型,您需要使用count()函数。
string = "something " + std::to_string(ms.count()) + " something else";

如果我将ms.count()打印为%llu,它可以正常工作,但是如果我尝试将std::to_string(ms.count())打印为%s,则会出现奇怪的字符,例如��。 - Crisoberillo
(1/2)在我的例子中,我可能过于简化了。我正在使用cocos2d-x开发一个游戏。我需要处理一些网络通信,我必须实现的是要格式化一个字符串,例如“ts =”+时间戳+“&a = move”。 - Crisoberillo
通过查看一些cocos2d-x指南和stackoverflow,我现在的代码是:const char* postData = ("ts="+ std::to_string(ms.count()) + "&a=move").c_str();。我的问题是postData为空,但如果我用一个手动插入的小整数替换ms.count(),它就可以正常工作。如果我使用的整数太大(6位或更多),我又会遇到空字符串的问题。10000和99999都可以,但再多一位数字,比如100000和999999,就会出现空字符串的问题。希望这样清楚易懂。 - Crisoberillo
@Crisoberillo 将字符串存储为 std::string,如果需要 const char*,则可以随时调用 c_str()auto timestamp = "ts="+ std::to_string(ms.count()) + "&a=move"; some_function(timestamp.c_str()); - NathanOliver
哇,这个有效。所以诀窍是把"ts="+ std::to_string(ms.count()) + "&a=move"存储在一个变量中?非常感谢 :) - Crisoberillo
显示剩余2条评论

4
使用count方法和std::to_string。示例:
string = "something " + std::to_string(ms.count()) + " something else"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接