C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")

C++: how do I convert a string that's a unix time to *tm? (Error using strptime: "cannot convert 'String' to 'tm*' ")

本文关键字:tm 时间 错误 String cannot to convert unix 字符串 C++ 转换      更新时间:2023-10-16

我正在使用API来检索UNIX时间,但它以字符串形式出现,即"1539944398000">

我想将其转换为 UNIX 时间,以便我可以对其进行操作(并最终提取小时/分钟以放入打印(。

这是我尝试过的代码:

String nextBusScheduled = client2.readStringUntil('<');
char bufScheduled[40];
strptime(bufScheduled, "%Y-%m-%d", nextBusScheduled);

这是我得到的错误:

cannot convert 'String' to 'tm*' for argument '3' to 'char* strptime(const char*, const char*, tm*)' 

我推荐Howard Hinnant的日期/时间库。 在本练习中,您只需要date.h标头(没有源(:

#include "date/date.h"
#include <chrono>
#include <cstdint>
#include <iostream>
#include <sstream>
int
main()
{
using namespace date;
using namespace std;
using namespace std::chrono;
int64_t i;
istringstream in{"1539944398000"};
in >> i;
sys_time<milliseconds> tp{milliseconds{i}};
cout << tp << 'n';
cout << format("%H:%M", tp) << 'n';
}

只需解析为 64 位整数类型,并从该解析构造一个std::chrono::milliseconds(到目前为止,这只是直接的 C++11(。 然后你可以从中构建一个sys_time<milliseconds>sys_time<milliseconds>只是std::chrono::time_point<std::chrono::system_clock, std::chrono::milliseconds>的类型别名,或者更简单地说:具有毫秒精度的Unix时间。

我展示了两种打印方法,这是date.h真正有帮助的地方。 此示例输出:

2018-10-19 10:19:58.000
10:19

此代码将通过删除#include "date/date.h"using namespace date;来移植到 C++20