c++ - 如何在 C++11 中将 Unix 时间戳字符串转换为 time_t?

标签 c++ unix c++11 time-t feedly

<分区>

简短的问题,又名“TD;DR”。

我有一个“1464478647000”字符串,我猜它是一个 UNIX 时间戳。但它肯定是一个包含代表时间的数字的字符串,但不是人类可读的格式。如何将它转换为 time_t 类型以便稍后将其格式化为格式化字符串,例如 C++11 中的“3 分钟前”?


长问题。

首先,抱歉我的英语不好。

我完全不懂 C++11,甚至 C++;我刚学了一点 C,那是 10 年前的事了,我差点忘记它是怎么回事了。在业余时间,我正在尝试对 Feednix 做一个小 fork 。 (一个用 C++11 编写的 ncurses 程序,充当 Linux 控制台的 Feedly 客户端——看起来它已经死了)所以它看起来更像一个列表(有点像 ncmpcppmutt 的样子)。作为当前Feednix实现不显示任何帖子的时间,我认为让它显示发布时间会很好(就像 Feedly 的网络版本一样,在其“仅标题”演示文稿中)。

问题是遵循在 Feednix 上实现的模型,我将“已发布”数据作为字符串对象提取(我不知道如何将其作为整数提取,或直接作为 time_t 对象提取(似乎 Json 库不允许Feedly API 文档说,“已发布”数据是“文章发布时的时间戳,以毫秒为单位,由 RSS 提要报告(通常不准确)。”一个例子是“1452614967000” .

那么我该怎么做才能将该字符串转换为 time_t 对象,以便稍后将其格式化为“3 分钟前”或“2 天前”之类的字符串?或者我能做些什么来获得格式化的字符串(更有可能)?任何帮助将不胜感激!

最佳答案

首先,使用strtol将数字转换为long,然后转换为time_t:

#include <cstdlib>
#include <ctime>

using namespace std; // to simplify answer

...
const char* timestr = "1464478647000";
time_t timenum = (time_t) strtol(timestr, NULL, 10); 

关于c++ - 如何在 C++11 中将 Unix 时间戳字符串转换为 time_t?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37505001/

相关文章:

c# - XXTEA的返回值

C++ 数组初始化

linux - 如何从一台机器远程执行不同机器上的linux命令?

c++ - compare_exchange_weak() 编译错误?

c++ - 为什么复制省略不适用于 std::move?

c++ - 来自程序子窗口的位图返回为黑色

c++ - Boost asio 无法在所有线程上运行 io 服务。io 服务在第一个线程调用时阻塞

bash - UNIX:从 CSV 文件中获取数字的出现次数

c - 使用 C 语言编写的 Unix 尾部程序,使用已实现的函数

c++ - 友元函数默认模板 : Intel ICPC warning