2

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

4

2 回答 2

2

Atime_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;
}
于 2012-10-16T21:37:51.457 回答
0

时间

struct tm * gmtime ( const time_t * timer );

将 time_t 转换为 tm 作为 UTC 时间

使用 gmtime 时会发生转换

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

于 2012-10-16T19:27:14.383 回答