【发布时间】:2021-02-19 20:32:38
【问题描述】:
我试图找到这个问题的答案,但我发现的来源没有正确转换时间。最初我有一个字符串中的时间戳,因为我从 .json 网络抓取程序获取时间戳,但想将其转换为可读的日期/时间。我最近进行转换的尝试是将字符串转换为 long 并将 long 转换为 time_t,然后使用 strftime() 但这不会产生正确的答案。
这是我将字符串转换为 long 然后转换为 time_t 然后使用 strftime() 的代码
std::string timeStampToRead(const time_t rawtime)
{
struct tm *dt;
char buffer [30];
dt = localtime(&rawtime);
strftime(buffer, sizeof(buffer), "%m%d %H%M", dt);
return std::string(buffer);
}
int main()
{
std::string epochT = "1604563859000";
long e = atol(epochT.c_str());
const time_t rawtime = (const time_t)e;
std::string time = timeStamptToRead(rawtime);
return 0;
}
这段代码的结果是0808 1703
我也尝试做与上面非常相似的事情,但将 timeStampToRead 更改为以下
std::string timeStampToRead(const time_t rawtime)
{
struct tm *dt;
char buffer [30];
dt = localtime(&rawtime);
return asctime(dt);
}
这返回 Mon Aug 8 17:03:20 这也是不正确的
正确的答案应该是 2020 年 11 月 5 日星期四 8:10:59 UTC 或 2020 年 11 月 5 日星期四 1:10:59(本地不一定是那种确切的格式,只是正确的月份、日期和时间是重要)
我已经测试了将字符串转换为 long 的结果并且工作正常,所以我认为错误是在将 long 转换为 time_t 或使用 time_t 获取时间的可读格式的过程中。在这两个选项中,我认为从 long 到 time_t 的转换更有可能是问题,但找不到另一种方法来进行转换。
我希望有一种简单的方法可以直接获取字符串并对其进行转换,但我无法在任何地方找到任何相关信息,因此我将字符串转换为 long 然后转换为 time_t。基本上,我不知道如何将字符串或长 unix 纪元时间戳转换为 time_t 以将其转换为可读格式,或者至少这是我假设错误所在的地方。如果有人能指出正确的方向以使此转换代码正常工作,我将不胜感激。
【问题讨论】:
标签: c++ type-conversion timestamp unix-timestamp epoch