通用时间分为:GMT格林尼治时间,UTC统一协调时间,DST夏日节约时间,CST时间,以及本地时间Localtime。
UTC时间基本可以认为等同GMT时间(更加精准),都是本初子午线的时间。而Localtime是在UTC时间基础上加上时区与本初子午线的时间差得到的时间。
对于Linux,又分为系统时间和硬件时钟。更改了系统时间,还要通过命令写入硬件时钟。
Linux下的时钟相关函数如下:
其中,从内核获取的三个时间,都是UTC时间,其中timeval和time_t得到的时间都是相对于1970年1月1日00:00:00的秒数(timeval还有微妙)。
从UTC时间可以通过localtime()函数得到本地时间,该函数已经考虑了本地所在时区以及夏时令的因素。
localtime和gmtime都是将time_t结构分解为更为详细的struct tm结构。
对于从NTP得到的时间,也是一个time_t类型的值,但是表示的是相距1900年1月1日00:00:00的秒数(而不是1970年),所以如果要以NTP得到的时间来对本地时间直接进行配置,则需要先减去UNIX_OFFSET(1900~1970年之间的秒数),然后在通过settimeofday()函数写入系统时间,最后再通过hwclock –w写入硬件时钟(root权限才能执行成功)。