将秒数转换为时间

时间:2014-07-29 14:04:04

标签: c++ datetime time

有没有办法按格式3056144 sec转换秒数(例如YYYY-mm-dd HH:MM:SS,这是时间增量而不是时间)?

我尝试使用struct tm将秒数转换为localtime,然后减去UNIX开始时间(1970-01-01),但这不能按预期工作。

提前致谢。

P.S。我必须使用C ++ 03,而不是C ++ 11。

2 个答案:

答案 0 :(得分:1)

如果您使用Boost.Date_Time是一个选项,那么您可能正在寻找这个选项:

#include <boost/date_time.hpp>

using boost::posix_time::seconds;
using boost::posix_time::to_simple_string;

std::cout << to_simple_string(seconds(3056144)) << std::endl;

这将打印:

  

848:55:44

但是,正如您在上面的输出中所看到的,它不会告诉您已经过了多少年。这是有充分理由的,因为一年并不总是365天。

答案 1 :(得分:0)

如果您要将时间增量转换为类似ISO 8601的时间,您只需要将您的timedelta偏移自1907-01-01以来对应于您的0(开始)时间的秒数,然后使用localtime转换为struct tm


由于每月的天数取决于它的月份和年份,尝试将delta秒转换为任何比更大的时间单位,而不考虑开始和结束时间在实际上的位置日历将充满错误。

像芭丝谢芭提到的那样,这取决于你需要多准确。

我已经看到一些算法解决了这个问题,即假设一个月是30天(因此一年只有360天)。如果这就是你想要做的事情,那么尝试使用localtime生病就会比它的价值更麻烦。

如果您想“完全”正确地执行此操作,则必须将开始和结束时间转换为实际的对齐到{8}的time_t值,并使用某种日历感知日期计算弄清楚两者之间的时间。 localtime不会削减它(而且甚至没有考虑到时间区域超过DST边界的时间如何)。