最近在做项目的时候,需要用到LINUX下的系统时间,然后在网上就找到几个获得LINUX下的系统时间的函数,其中包括struct tm * gmtime(const time_t *timer);
struct tm * localtime(const time_t * timer);这两个函数,当没太注意这两个函数的区别,在用的时候就出了问题,在这里总结出来,要是用遇到同样问题的朋友,可以很快的解决掉。因为我在遇到这个问题的时候在网上找了半天也没找到,最后在QT的群里的“城市无名者“的提示下,解决的,所以我感觉有必要在这里总结一下。
首先我用的是gmtime();可是在用的时候,就出问题了,因为中gmtime()函数是将日历时间转化为世界标准时间(即格林尼治时间),并返回一个tm结构体来保存这个时间,这样得到的时间比中国地区本地时间会比世界标准时间早8个小时,也就是说要得到中国地区本地时间就要在用gmtime得到的时间后再加8小时,这一点我在网上也找到了。这时又出问题了,这是我自己遇到的,这在网上没找到的,大家应该注意的地方,也就是要说的地方,就是:再用gmtime得到的时间后再加8小时后,时间会超过24小时,例如会出现:26:12:30,这样的情况,这就是时间超过了24时表示法。当时我又写了一个最辍的算法,就是判断年月日时分秒,然后如果需要一次加一,写出来之后,“都市无名者”提出在1、3、5、7、8、10、12月份和闰年、闰月的情况,我一想这下算法就复杂了,这时“都市无名者”就说了一句,谁让你用这个函数的,我想,也是,那就换个函数,于是就想到,localtime(),别说这个函数还真好用,直接用这个函数,就可以得到本地时间,这点相信大家都知道,这篇文章主要是给使用到gmtime函数的朋友,或遇到以上超过24时的情况,有个参考,所以如果大家要得到LINUX下的系统时间,请使用localtime()函数。
虽然问题解决了,但是又想到了一些问题,就是,既然localtime()可以得到本地时间了,那gmtime()函数在中国的用途在哪呢?只是得到世界标准时间(即格林尼治时间)?请知道的朋友,告之,谢谢了,当然一定是有它的用处的,只是目前我还不太清楚。