我有一个使用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
只是自1970年1月1日0:00:00以来的秒数。
只需向time_t
添加一个(可能为负)值以更改时间,确保该值不会溢出,然后照常使用localtime
。