1、Linux下的时间
1.1、Linux下的时间系统
1.2、Linux下与时间有关的数据结构
2、获得当前时间
3、延时
4、定时器
4.1、alarm
4.2、setitimer
1、Linux下的时间
1.1、Linux下的时间系统
UNIX及Linux的时间系统是由"新纪元时间"Epoch(计算机时代开端)开始计算起,单位为秒,Epoch则是指定为 1970年 1月 1日 凌晨零点零分零秒,格林威治(GMT)时间。
目前大部份的UNIX系统都是用32位来记录时间,正值表示为1970以後,负值则表示1970年以前。我们可以很简单地计算出其时间范围:
2^31/86400(s) = 24855.13481(天) ~ 68.0958(年)
1970+68.0958 = 2038.0958
1970-68.0958 = 1901.9042
时间范围为[1901.9042,2038.0958]。
准确的时间为 2038年 1月 18日 星期一晚上十点十四分七秒。那一刻,时间将会转为负数,变成 1901年 12月 13日 黑色星期五下午三点四十五分五十二秒,这就是所谓的UNIX 2038 BUG,或者您也可戏称为Jason hatchet bug。在大部份的UNIX上,并没有所谓Y2K问题,不过都有2038年问题。
1.2、Linux下与时间有关的数据结构
struct timeval {
int tv_sec;
int tv_usec;
};
其中tv_sec是由Epoch开始算起的秒数,tv_usec则是微秒(10E-6 second)。
struct timezone {
int tv_minuteswest;
int tv_dsttime;
};
tv_minuteswest是格林威治时间往西方的时差,tv_dsttime则是时间的修正方式。
struct timespec
{
long int tv_sec;
long int tv_nsec;
};
tv_nsec是nano second(10E-9 second)。