Unix内核通过计算从1970年1月1日0点0分0秒纪元(UTC)开始经过的秒数来提供的基本时间和日期服务。在用户层,这个值是以time_t(在Unix中以t结尾的数据类型被称作基本系统数据类型,int的定义类型)数据类型标识的,一般被称作日历时间(calendar time),并通过函数time获得当前的值。 time函数原型:
[html] view plaincopy
如果参数timeptr不为NULL的话则返回值也保存在它所指向的内存空间中。发生错误的话返回-1。
当获取这个值后,就可以通过调用其他函数来将它转换成可读的日期和时间,它们之间的关系如下图(来自Unix高级环境编程):
struct tm结构为:
[html] view plaincopy
localtime、gmtime和mktime的函数原型
[html] view plaincopy
localtime函数将日历时间转换成本地时间而购买time则转换为UTC时间,mktime则将本地时间转换为日历时间。 函数ctime和actime分别以time_t和struct tm的指针数据类型为参数,返回可读性很好的时间表示字符串,函数原型为
[html] view plaincopy
strftime函数类似于snprintf函数,但它是专用于存储转换时间和日期的,并定义有特定的format,函数原型:
[html] view plaincopy
上述的所有函数只能提供秒级的精度,如果想获得更高的精度,则可以使用函数gettimeofday(微秒级精度)和clock_gettime函数(纳秒级精度)。不过它们都是基于单独的Unix规范和POSIX规范的。 gettimeofday函数原型和相关数据结构
[html] view plaincopy
clock_gettime函数:
[html] view plaincopy
将clk_id置为CLOCK_REALTIME则可以获得当前具体时间(从纪元开始)。 |
|
来自: astrotycoon > 《time》