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*' ")
我正在使用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
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 从持续时间构造std::chrono::system_clock::time_point
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 使用简单类型列表实现的指数编译时间.为什么
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 在已经使用Git的情况下减少编译时间
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 从文本文件中读取时钟时间和事件时间并进行处理
- 具有未知值时的时间复杂性
- 如何减少花费的时间
- C++在变量给定的指定时间内关闭电脑
- rcpp函数中的清理时间很长
- C++:floor unix时间戳到UTC月份
- C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")
- 用 tm 加减时间
- C++ 将包含 UTC 日期和时间的字符串转换为 TM 结构
- 正在查找具有tm以外的成员对象的另一个时间结构
- 我如何使用tm结构添加分钟到当前时间