-
以单独秒数做为参数或返回值的,都是指UTC时间,它跟时区没有关系。
-
不考虑时区,秒数与年月日时分秒的转换是有固定算法的(闰),它与真实世界实际的秒有差别。
在应用层可以用gmtime函数,在内核层可以看rtc_time64_to_tm,mktime64函数。 -
gettimeofday,time,gmtime,localtime,mktime,ctime,asctime7个函数中,其实只有localtime,mktime,ctime3个函数是时区相关的,剩余4个都是时区不相关的。
gettimeofday,time就是纯粹获取秒数(UTC)。
gmtime根据一套算法把秒数(UTC)转成年月日时分秒。
asctime就是纯粹的数值转字符串。
ctime(t)等价于asctime(localtime(t))。
因此,时区相关的实际只有localtime和mktime这对反函数。 -
localtime,mktime,ctime三个时区相关的函数,它们的实现应该会调用tzset这个函数。
tzset函数会用TZ环境变量去初始化tzname变量。在类System-V的环境中,此函数还会设置timezone,daylight变量。如果没有TZ这个环境变量,则会在一些常用的地方寻找时区文件(/etc/localtime等)。 -
对于localtime,mktime,ctime三个时区相关的函数,调用它们之后,应该是要求它们去改tzname,timezone,daylight变量。而对于时区相关的可重入版本localtime_r,ctime_r,则没有这个要求(need not set)。即,调用这两个函数后,改tzname,timezone,daylight变量也可以,不改也可以。
-
dst(daylight saving time)是指夏令时,我国在91年前后也实行过一段时间。我国的时区名是CST,正常情况tzname的两个值都是CST。当夏令时生效时,tzname的第二个值会变成CDT。
网友评论