linux下时间戳是一个随晶振变化的量,但是世界各地的时区是不一样的。
void timestampToDatetime(time_t timestamp) {
struct tm* timeinfo;
int year, month, day, hour, minute, second;
timeinfo = localtime(×tamp);
year = timeinfo->tm_year + 1900;
month = timeinfo->tm_mon + 1;
day = timeinfo->tm_mday;
hour = timeinfo->tm_hour;
minute = timeinfo->tm_min;
second = timeinfo->tm_sec;
printf("转换后的日期时间为: %04d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second);
}
这个时间是基于 欧洲时间的,如果用北京时间戳 ,会导致时间慢8个小时。
因为localtime
函数默认将时间戳转换为本地时区的时间,而不是UTC时间。在某些情况下,本地时区可能与UTC时间有偏差,从而导致转换结果出现偏移。为了解决这个问题,你可以使用gmtime
函数将时间戳转换为UTC时间,然后手动调整时区的偏移量。
void timestampToDatetime(time_t timestamp) {
struct tm* timeinfo;
int year, month, day, hour, minute, second;
timeinfo = gmtime(×tamp);
year = timeinfo->tm_year + 1900;
month = timeinfo->tm_mon + 1;
day = timeinfo->tm_mday;
hour = timeinfo->tm_hour + 8; // 调整时区偏移
minute = timeinfo->tm_min;
second = timeinfo->tm_sec;
printf("转换后的日期时间为: %04d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second);
}