将秒数转换为时间

mav*_*rik 6 c++ time datetime

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

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

提前致谢.

PS我必须使用C++ 03,而不是C++ 11.

Mik*_*one 0

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


由于每月的天数取决于具体的月份和年份,因此尝试将增量秒转换为比天更大的时间单位而不考虑开始和结束时间在实际日历上的位置将会令人担忧。有错误。

就像芭丝谢芭提到的那样,这取决于您需要的准确程度。

我见过一些算法回避了简单假设一个月为 30 天(因此一年只有 360 天)的问题。如果这就是您想要做的,那么尝试使用localtimeill 会带来更多麻烦,而不是值得的。

如果您想“完全”正确地执行此操作,则必须将开始时间和结束时间转换为实际的与纪元对齐的time_t值,并使用某种日历感知的日期计算来计算两者之间的时间。localtime不会削减它(而且这甚至没有考虑到时间增量跨越 DST 边界将如何减少一个小时)。