【问题标题】:Join the date & time of two time_t values加入两个 time_t 值的日期和时间
【发布时间】:2012-10-06 23:15:12
【问题描述】:

我写了一个函数,我相信它会加入一个 time_t 的日期组件和另一个 time_t 的时间组件:

time_t joinDateTime( time_t date, time_t time )
{
    tm tm_date( *gmtime( &date ) ), tm_time( *gmtime( &time ) );

    tm_date.tm_hour = tm_time.tm_hour;
    tm_date.tm_min = tm_time.tm_min;
    tm_date.tm_sec = tm_time.tm_sec;

    return mktime( &tm_date );
}

此函数不应执行任何时区转换,但 mktime() 显然假定您给它的时间结构在您的本地时区,并将其转换为 UTC 0。如何修改此函数以不应用时区mktime() 提供的转换?

【问题讨论】:

    标签: c++ datetime time


    【解决方案1】:

    time_t 始终采用 UTC 时间。如果这是您想要的,还有一种更直接的方式来加入日期和时间。由于测量以秒为单位,因此您可以除以天数,然后将余数作为时间。

    time_t joinDateTime( time_t date, time_t time )
    {
        time_t days = date / (24*60*60);
        time_t seconds = time % (24*60*60);
    
        return days*24*60*60 + seconds;
    }
    

    【讨论】:

    • 谢谢;这绝对是一个更好、更强大的解决方案(我希望总体上实现更简化)。
    【解决方案2】:

    gmtime

    struct tm * gmtime ( const time_t * timer );
    

    将 time_t 转换为 tm 作为 UTC 时间

    转换发生在您使用 gmtime 时

    改用struct tm * localtime ( const time_t * timer );

    【讨论】:

      猜你喜欢
      • 2018-06-25
      • 2018-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-21
      • 1970-01-01
      相关资源
      最近更新 更多