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

时间:2016-05-29 00:27:54

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

简短问题,又名" TD; DR"。

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

很长的问题。

对不起我的英语不好,首先。

我在C ++ 11,甚至是C ++中完全是noob;我刚学了一点C,就像10年前那样,我差点忘了它是怎么回事。在我的业余时间,我试图做一个Feednix的小分支(一个ncurses程序,用C ++ 11编写,充当Linux控制台的Feedly客户端 - 看起来像它&#39 ; s死了)所以它看起来更像一个列表(ncmpcppmutt的样子)。由于当前的Feednix实现没有显示任何帖子的时间,我认为让它显示发布时间会很好(因为Feedly的网络版本,它的#34;仅限标题&# 34;演讲)。

问题在于,遵循Feednix上实施的模式,我已经发布了'发布的'数据作为字符串对象(我无法想象如何将其作为整数拉出,或者直接作为time_t对象(似乎Json库不允许这样做)。说&# Feedly API docs表示,已发布的数据是发布本文的时间戳,以ms为单位,由RSS提要报告(通常不准确)。"其中一个例子是" 1452614967000"

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

1 个答案:

答案 0 :(得分:1)

首先,使用long将数字转换为strtol,然后转换为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);