嗯,我认为标题总结了它。假设我有一个double
类型的对象,我是通过在std::difftime
个对象上运行time_t
获得的,现在我想将结果秒数添加回time_t
宾语。我不介意失去几秒钟。
请注意,秒数可能很大(即,大于struct tm
中允许的60秒,但总是低于用于表示相应计算机/实现上的秒数的任何整数原语,并且永远不会大于1年的顺序,虽然我不希望这是一个限制)。
我如何进行便携式(即根据C标准)?
我希望不必分为几个月,几天,几小时,几分钟等,并将它们手动添加到struct tm
对象。当然有更好的方法!?
答案 0 :(得分:4)
您可以使用time_t
值执行算术。
你可以相隔一秒设置两个struct tm
个对象(在某个地方中间选择两次,不允许发生闰秒,以及在DST不变的当地时间),并在它们上面调用mktime()
以获得两个time_t
值。从后者中减去那些time_t
值中较早的值,这将为您提供在系统中测量time_t
的相同单位数的第二个值。将此值乘以您要添加的秒数,并将结果添加到原始time_t
值。您可以再次在原始difftime()
值上调用time_t
来检查结果,看看秒差是否与您期望的差异。
请注意,即使这不是保证可移植,因为从技术上讲,time_t
甚至不需要具有能够区分秒数的分辨率,但它会很漂亮奇怪的实施,没有。此外,如果time_t
是浮点值(这是不常见的)并且您想要添加非常大的秒数,则可能会遇到浮点精度问题。在这种情况下,您可以尝试添加小时,而不是秒,并相应地设置两个struct tm
结构。您可能会遇到溢出问题,并且有足够长的秒数,而您无法做太多。
答案 1 :(得分:3)
使用localtime
将time_t
值转换为struct tm
,其中将时间分解为小时,分钟,秒等。适当调整秒数,然后使用mktime
将结构中的值转换为time_t
。
答案 2 :(得分:-3)