gpt4 book ai didi

c++ - 如何将大量秒数可移植地添加到 time_t 对象?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:03 27 4
gpt4 key购买 nike

嗯,我认为标题总结了它。假设我有一个 double 类型的对象,它是通过在两个 time_t 对象上运行 std::difftime 获得的,现在我想添加结果返回到 time_t 对象的秒数。我不介意损失几分之一秒。

请注意,秒数可能很大(即大于 struct tm 中允许的 60 秒,但始终低于用于在相应机器/实现上表示秒的任何整数原语,并且永远不会超过 1 年的数量级,尽管我最好不希望这是一个限制)。

我将如何着手可移植(即按照 C 标准)?

我希望不必将它们分为月、日、小时、分钟等,然后手动将它们添加到 struct tm 对象中。当然有更好的方法!?

最佳答案

您可以使用 time_t 值执行算术运算。

可以设置两个相隔一秒的struct tm对象(选择两次在一分钟中间的某个地方,不允许出现闰秒,并且在本地时间出现DST不改变),并对它们调用 mktime() 以获得两个 time_t 值。从较晚的 time_t 值中减去较早的值,这将为您提供与系统上测量的 time_t 相同单位数的秒。将其乘以您要添加的秒数,并将结果添加到您的原始 time_t 值。您可以通过对原始和新的 time_t 值再次调用 difftime() 来检查结果,以查看秒数差异是否符合您的预期。

请注意,即使这保证是可移植的,因为从技术上讲,time_t 甚至不需要具有能够区分秒的分辨率,但它会是一个非常奇怪的实现,但没有。此外,如果 time_t 是一个浮点值(这是不常见的)并且您想要添加非常非常大的秒数,您可能会遇到浮点精度问题。在这种情况下,您可以尝试添加小时而不是秒,并相应地设置您的两个 struct tm 结构。可以想象,如果秒数足够长,您可能会遇到溢出问题,对此您无能为力。

关于c++ - 如何将大量秒数可移植地添加到 time_t 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18932860/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com