有没有办法按格式3056144 sec
转换秒数(例如YYYY-mm-dd HH:MM:SS
,这是时间增量而不是时间)?
我尝试使用struct tm
将秒数转换为localtime
,然后减去UNIX开始时间(1970-01-01),但这不能按预期工作。
提前致谢。
P.S。我必须使用C ++ 03,而不是C ++ 11。
答案 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边界的时间如何)。