连接两个time_t值的日期和时间

Join the date & time of two time_t values

本文关键字:日期 时间 time 两个 连接      更新时间:2023-10-16

我写了一个函数,我相信它会连接一个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() 提供的时区转换?

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;
}

GMTIME

struct tm * gmtime ( const time_t * timer );

将 time_t 转换为 tm 作为 UTC 时间

转换发生在您使用 gmtime

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