0

以下代码段来自rtc.cin busybox-1.22.1

在我的情况下,utc总是 0,所以这个函数只是做从struct tm到的转换time_t

time_t FAST_FUNC rtc_tm2time(struct tm *ptm, int utc)
{
    //fprintf(stdout, "ptm->tm_hour: %d\n", ptm->tm_hour);
    char *oldtz = oldtz; /* for compiler */
    time_t t;

    if (utc) {
        oldtz = getenv("TZ");
        putenv((char*)"TZ=UTC0");
        tzset();
    }

    t = mktime(ptm); //problem here
    //struct tm* temp = localtime(&t);
    //fprintf(stdout, "temp->tm_hour: %d\n", temp->tm_hour);

    if (utc) {
        unsetenv("TZ");
        if (oldtz)
        {
            putenv(oldtz - 3);
        }
        tzset();
    }

    return t;
}

此外,还有一个/etc/TZ显示时区和 DST 信息的文件。

~ # cat /etc/TZ
LMT0:00LMT-1:00,M8.5.1/10,M12.5.1/10

然后,我将系统时间设置为 2021/8/30,9:59:30(比 DST 开始日期早 30 秒),并同步到 hwclock。

date -s 2021.08.30-09:59:30 >/dev/null 2>/dev/null //set system time
hwclock -w //sync RTC to system time

在观察 CLI 上的输出时连续输入 hwclock。

~ # hwclock
ptm->tm_hour : 9
temp->tm_hour : 9
Mon Aug 30 09:59:58 2021  0.000000 seconds

~ # hwclock
ptm->tm_hour : 10
temp->tm_hour : 11 //why not 10?
Mon Aug 30 11:00:00 2021  0.000000 seconds

为什么输入夏令时时from的返回值mktime加1?它不应该受DST影响吗?

4

0 回答 0