好吧,我认为标题总结了它.假设我有一个类型的对象double,我通过std::difftime在两个time_t对象上运行获得,现在我想将结果的秒数添加回time_t对象.我不介意失去几秒钟.
请注意,秒数可能很大(即,大于允许的60秒struct tm,但总是低于用于表示相应机器/实现上的秒数的任何整数原语,并且永远不会大于1年的数量级,但最好是我不希望这是一个限制).
我将如何便携地进行此操作(即根据C标准)?
我希望不必分为几个月,几天,几小时,几分钟等,然后手动将它们添加到struct tm对象中.当然有更好的方法!?
您可以对time_t值进行算术运算。
你可以设置两个struct tm对象相隔一秒(选择两次在一分钟中间的某个地方,不允许出现闰秒,并且在夏令时不改变的当地时间),并调用mktime()它们都得到两个time_t价值观。从较晚的值中减去较早的值,这将为您提供与系统上测量的time_t单位数相同的秒数。time_t将其乘以您要添加的秒数,并将结果添加到您的原始time_t值。difftime()您可以通过再次调用原始值和新值来检查结果time_t,看看秒数差异是否符合您的预期。
请注意,即使这样也不能保证是可移植的,因为从技术上讲,time_t甚至不需要具有能够区分秒的分辨率,但如果没有的话,这将是一个非常奇怪的实现。另外,如果time_t是浮点值(这很不寻常)并且您想要添加非常非常大的秒数,则可能会遇到浮点精度问题。在这种情况下,您可以尝试添加小时而不是秒,并相应地设置两个struct tm结构。可以想象,您可能会遇到足够长的秒数溢出问题,而您对此无能为力。
| 归档时间: |
|
| 查看次数: |
1209 次 |
| 最近记录: |