我有一个程序使用 time() 和 localtime() 来设置内部时钟,但这需要更改,以便内部时钟独立于用户和“实时”时间。我需要能够设置任何合理的开始时间,并根据程序内部的计时器让它向前计数。关于解决此问题的最佳方法的任何想法?以下是摘录:
#define ConvertToBCD(x) ((x / 10) << 4) | (x % 10);
time_t tm;
time(&tm);
struct tm *tm_local= localtime(&tm);
tm_local->tm_year %= 100;
tm_local->tm_mon++;
timedata[0] = ConvertToBCD(tm_local->tm_year);
timedata[1] = ConvertToBCD(tm_local->tm_mon);
timedata[2] = ConvertToBCD(tm_local->tm_mday);
timedata[3] = (tm_local->tm_wday + 6) & 7;
if (!(TimeStatus & 0x02)) tm_local->tm_hour %= 12;
timedata[4] = ((tm_local->tm_hour < 12) ? 0x00 : 0x40) | ConvertToBCD(tm_local->tm_hour);
timedata[5] = ConvertToBCD(tm_local->tm_min);
timedata[6] = ConvertToBCD(tm_local->tm_sec);
最佳答案
在 POSIX 兼容系统下,time_t
只是自 epoch,1970 年 1 月 1 日 0:00:00 以来的秒数。
只需将一个(可能为负的)值添加到 time_t
以更改时间,确保该值不会溢出,然后像往常一样使用 localtime
。
关于c++ - 用独立于用户的等效项替换 time() 和 localtime(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/741254/