我正在使用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*)'
答案 0 :(得分:-1)
我推荐Howard Hinnant's date/time library。对于本练习,您需要的只是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 Time。
我展示了两种打印方法,date.h
确实可以为您提供帮助。此示例输出:
2018-10-19 10:19:58.000
10:19
只需删除#include "date/date.h"
和using namespace date;
,此代码即可移植到C ++ 20。