time
time 模块提供 POSIX 标准的时间相关接口,包括时间获取、时间转换、定时器管理、高精度睡眠等功能。
头文件清单
接口清单
| 接口名称 | 功能简述 |
|---|---|
| asctime_r | 将时间和日期以字符串形式表示 |
| clock_getres | 获取对应时钟类型能够提供的时间精确度 |
| clock_gettime | 获取指定时钟的时间 |
| clock_settime | 设置指定时钟的时间 |
| clock_nanosleep | 具有可指定时钟的高分辨率睡眠 |
| ctime_r | 将时间和日期以字符串形式表示 |
| gmtime_r | 取得目前的时间和日期 |
| localtime_r | 取得当地目前的时间和日期 |
| nanosleep | 进程以纳秒为单位休眠 |
| strftime_l | 格式化日期和时间 |
| strptime | 按照特定时间格式将字符串转换为时间类型 |
| timer_create | 创建定时器 |
| timer_delete | 删除定时器 |
| timer_getoverrun | 获取定时器超时次数 |
| timer_gettime | 获得一个定时器剩余时间 |
| timer_settime | 初始化或者撤销定时器 |
Functions
asctime_r
函数声明
头文件清单
功能说明
- 将struct tm结构体中的时间信息转换为可读的字符串格式
- 转换结果写入用户提供的缓冲区中,线程安全
- 输出格式为"Weekday Month Day HH:MM:SS Year\n"
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| tm | const struct tm *__restrict | 指向待转换的时间结构体的指针 | 非NULL |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| buf | char *__restrict | 写入格式化后的时间字符串,缓冲区大小不小于26字节 |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 非NULL指针 | 成功返回buf指针 | 转换成功 |
| NULL | 转换失败 | tm中字段超出有效范围 |
clock_getres
函数声明
头文件清单
功能说明
- 获取指定时钟类型的分辨率(精确度)
- 将时钟分辨率写入tp指向的timespec结构体
- 仅支持CLOCK_REALTIME时钟类型
前置条件
- 调用时序约束:需在系统时钟初始化完成后调用
- 依赖关系:依赖系统时钟已正常工作
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| clockId | clockid_t | 时钟类型标识 | CLOCK_REALTIME(0) |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| tp | struct timespec * | 写入时钟分辨率信息,tv_sec为0,tv_nsec为1000(1微秒),需非NULL |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 执行成功 | 参数合法 |
| -1 | 执行失败 | clockId不是CLOCK_REALTIME或tp为NULL,errno置为EINVAL |
clock_gettime
函数声明
头文件清单
功能说明
- 获取指定时钟的当前时间
- 支持CLOCK_REALTIME、CLOCK_MONOTONIC、CLOCK_MONOTONIC_RAW三种时钟类型
- 将时间信息写入tp指向的timespec结构体
前置条件
- 调用时序约束:需在系统时钟初始化完成后调用
- 依赖关系:依赖系统tick时钟已正常工作
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| clockId | clockid_t | 时钟类型标识 | - CLOCK_REALTIME(0) - CLOCK_MONOTONIC(1) - CLOCK_MONOTONIC_RAW(4) |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| tp | struct timespec * | 写入当前时钟时间信息,需非NULL |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 执行成功 | 参数合法,获取时间成功 |
| -1 | 执行失败 | clockId超出有效范围或tp为NULL,errno置为EINVAL |
clock_settime
函数声明
头文件清单
功能说明
- 设置指定时钟的时间
- 仅支持CLOCK_REALTIME时钟类型
- 设置的时间通过tp指向的timespec结构体传入
前置条件
- 调用时序约束:需在系统时钟初始化完成后调用
- 依赖关系:依赖系统时钟已正常工作
- 调用上下文约束:需在任务上下文调用,禁止在中断上下文调用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| clockId | clockid_t | 时钟类型标识 | CLOCK_REALTIME(0) |
| tp | const struct timespec * | 指向待设置时间信息的结构体指针 | 非NULL,tv_nsec范围0~999999999,tv_sec不小于0 |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 执行成功 | 参数合法,设置时间成功 |
| -1 | 执行失败 | clockId不是CLOCK_REALTIME或tp参数无效,errno置为EINVAL |
clock_nanosleep
函数声明
头文件清单
功能说明
- 具有可指定时钟的高分辨率睡眠功能
- 目前只支持CLOCK_REALTIME时钟
- flags为0时使用相对时间睡眠,flags为TIMER_ABSTIME时使用绝对时间
前置条件
- 调用时序约束:需在系统时钟初始化完成后调用
- 依赖关系:依赖nanosleep接口可正常工作
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| clk | clockid_t | 时钟类型标识 | CLOCK_REALTIME(0) |
| flags | int | 睡眠模式标志 | - 0:相对时间 - TIMER_ABSTIME(1):绝对时间 |
| req | const struct timespec * | 指向睡眠时间信息的结构体指针 | 非NULL,tv_nsec范围0~999999999,tv_sec不小于0 |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| rem | struct timespec * | 写入剩余时间信息,可为NULL |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 睡眠完成 | 指定时间已到 |
| EINVAL | 参数无效 | clk无效或flags非法 |
| ENOTSUP | 不支持 | 指定时钟类型不支持绝对时间睡眠 |
ctime_r
函数声明
头文件清单
功能说明
- 将time_t时间值转换为可读的本地时间字符串
- 转换结果写入用户提供的缓冲区中,线程安全
- 内部调用localtime_r和asctime_r完成转换
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| t | const time_t * | 指向待转换的时间值的指针 | 非NULL |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| buf | char * | 写入格式化后的本地时间字符串,缓冲区大小不小于26字节 |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 非NULL指针 | 成功返回buf指针 | 转换成功 |
| NULL | 转换失败 | 时间值无法转换为有效本地时间 |
gmtime_r
函数声明
头文件清单
功能说明
- 将time_t时间值转换为UTC时间的struct tm结构体
- 转换结果写入用户提供的结构体中,线程安全
- 转换后的tm_isdst置为0,tm_gmtoff置为0,tm_zone置为"UTC"
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| t | const time_t *__restrict | 指向待转换的时间值的指针 | 非NULL |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| tm | struct tm *__restrict | 写入UTC时间结构体信息,需非NULL |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 非NULL指针 | 成功返回tm指针 | 转换成功 |
| NULL | 转换失败 | 时间值超出可表示范围,errno置为EOVERFLOW |
localtime_r
函数声明
头文件清单
功能说明
- 将time_t时间值转换为本地时间的struct tm结构体
- 转换结果写入用户提供的结构体中,线程安全
- 考虑时区和夏令时偏移进行转换
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| t | const time_t *__restrict | 指向待转换的时间值的指针 | 非NULL |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| tm | struct tm *__restrict | 写入本地时间结构体信息,tm_gmtoff为时区偏移,需非NULL |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 非NULL指针 | 成功返回tm指针 | 转换成功 |
| NULL | 转换失败 | 时间值超出可表示范围,errno置为EOVERFLOW |
nanosleep
函数声明
头文件清单
功能说明
- 使当前进程以纳秒级精度休眠
- 目前只支持tick级(默认10ms)休眠精度
- 第二个参数rmtp不支持,传入的值将被忽略
- 休眠秒数不能大于4292秒
前置条件
- 调用时序约束:需在系统tick时钟初始化完成后调用
- 调用上下文约束:需在任务上下文调用,禁止在中断上下文调用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| rqtp | const struct timespec * | 指向休眠时间信息的结构体指针 | 非NULL,tv_nsec范围0~999999999,tv_sec不小于0且不超过4292 |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| rmtp | struct timespec * | 存放剩余时间信息的结构体指针(当前不支持,传入值将被忽略) |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 休眠完成 | 指定时间已到 |
| -1 | 执行失败 | 参数无效,errno置为EINVAL;或无权限,errno置为EPERM |
strftime_l
函数声明
size_t strftime_l(char *__restrict, size_t, const char *__restrict, const struct tm *__restrict, locale_t)
头文件清单
功能说明
- 根据指定区域设置格式化日期和时间
- 将struct tm结构体中的时间信息按format格式字符串转换为字符串
- 格式化字符不支持%z或%Z的格式化转换
- 支持locale_t参数指定区域设置
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| maxsize | size_t | 输出缓冲区的大小 | 大于0 |
| format | const char *__restrict | 格式化字符串 | 非NULL |
| tm | const struct tm *__restrict | 指向待格式化的时间结构体指针 | 非NULL |
| loc | locale_t | 区域设置 | 有效的locale_t值 |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| s | char *__restrict | 写入格式化后的时间字符串,需非NULL |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 非零值 | 成功写入的字符数(不含结尾\0) | 格式化成功 |
| 0 | 缓冲区空间不足 | maxsize不足或格式化结果为空 |
strptime
函数声明
头文件清单
功能说明
- 按照特定时间格式将字符串转换为struct tm时间结构体
- 解析输入字符串s中的时间信息,按format格式字符串进行匹配
- 支持常见的日期和时间格式化占位符
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| s | const char *__restrict | 指向待解析的时间字符串指针 | 非NULL |
| f | const char *__restrict | 格式化字符串指针 | 非NULL |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| tm | struct tm *__restrict | 写入解析后的时间结构体信息,需非NULL |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 非NULL指针 | 成功返回未解析部分的指针 | 解析成功 |
| NULL | 解析失败 | 字符串与格式不匹配 |
timer_create
函数声明
头文件清单
功能说明
- 创建一个POSIX定时器
- 只支持SIGEV_THREAD在线程内处理定时器回调
- clock_id只支持CLOCK_REALTIME
- 定时器创建后处于停止状态,需调用timer_settime启动
前置条件
- 调用时序约束:需在系统软件定时器模块初始化完成后调用
- 依赖关系:依赖LiteOS软件定时器资源可用
- 调用上下文约束:需在任务上下文调用,禁止在中断上下文调用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| clockId | clockid_t | 时钟类型标识 | CLOCK_REALTIME(0) |
| evp | struct sigevent *__restrict | 指向定时器事件配置结构体的指针 | 非NULL,sigev_notify必须为SIGEV_THREAD |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| timerId | timer_t *__restrict | 写入创建的定时器标识,需非NULL |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 创建成功 | 参数合法,定时器资源可用 |
| -1 | 创建失败 | clockId不是CLOCK_REALTIME或evp/timerId为NULL(errno=EINVAL);sigev_notify为SIGEV_SIGNAL/SIGEV_NONE(errno=ENOTSUP);sigev_notify无效(errno=EINVAL);定时器资源不足(errno=EAGAIN) |
timer_delete
函数声明
头文件清单
功能说明
- 删除一个已创建的POSIX定时器
- 删除后定时器标识不再有效
- 若定时器正在运行则先停止再删除
前置条件
- 调用时序约束:需在timer_create成功创建定时器后调用
- 调用上下文约束:禁止在中断上下文调用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| timerId | timer_t | 待删除的定时器标识 | 有效的timer_create返回的定时器标识 |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 删除成功 | 定时器标识有效,删除成功 |
| -1 | 删除失败 | 定时器标识无效,errno置为EINVAL |
timer_getoverrun
函数声明
头文件清单
功能说明
- 获取指定定时器的超时溢出次数
- 超时溢出指定时器到期但上一次到期通知尚未处理完毕的情况
- 返回值不超过DELAYTIMER_MAX
前置条件
- 调用时序约束:需在timer_create成功创建定时器后调用
- 依赖关系:依赖定时器已通过timer_settime启动运行
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| timerId | timer_t | 待查询的定时器标识 | 有效的timer_create返回的定时器标识 |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 非负整数 | 超时溢出次数 | 定时器标识有效,获取成功 |
| -1 | 执行失败 | 定时器标识无效,errno置为EINVAL |
timer_gettime
函数声明
头文件清单
功能说明
- 获取指定定时器的剩余时间和间隔时间
- it_value成员为到下一次到期的剩余时间
- it_interval成员为定时器的周期间隔时间
前置条件
- 调用时序约束:需在timer_create成功创建定时器后调用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| timerId | timer_t | 待查询的定时器标识 | 有效的timer_create返回的定时器标识 |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| value | struct itimerspec * | 写入定时器的剩余时间和周期间隔,需非NULL |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 执行成功 | 定时器标识有效,获取成功 |
| -1 | 执行失败 | 定时器标识无效或value为NULL,errno置为EINVAL |
timer_settime
函数声明
头文件清单
功能说明
- 设置或撤销定时器的到期时间和周期间隔
- it_value为0时表示停止定时器,定时器停止后仍需手动调用timer_delete删除
- it_interval为0时表示单次触发定时器
- 若oldValue非NULL,则返回之前的定时器设置
前置条件
- 调用时序约束:需在timer_create成功创建定时器后调用
- 调用上下文约束:禁止在中断上下文调用
- 依赖关系:it_value和it_interval中的时间值需为有效的timespec
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| timerId | timer_t | 待设置的定时器标识 | 有效的timer_create返回的定时器标识 |
| flags | int | 定时器模式标志 | 0(相对时间)或TIMER_ABSTIME(1)(绝对时间) |
| value | const struct itimerspec *__restrict | 指向新定时器设置的结构体指针 | 非NULL,it_value和it_interval需为有效timespec |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| oldValue | struct itimerspec *__restrict | 写入之前的定时器设置,可为NULL |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 设置成功 | 参数合法,设置成功 |
| -1 | 设置失败 | value为NULL或定时器标识无效或timespec参数无效,errno置为EINVAL |
Structures
struct tm
struct tm {
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
long __tm_gmtoff;
const char *__tm_zone;
};
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| tm_sec | int | 秒,取值范围0~59 |
| tm_min | int | 分,取值范围0~59 |
| tm_hour | int | 时,取值范围0~23 |
| tm_mday | int | 月内日期,取值范围1~31 |
| tm_mon | int | 月份,取值范围0~11(0表示一月) |
| tm_year | int | 自1900年起的年数 |
| tm_wday | int | 星期几,取值范围0~6(0表示周日) |
| tm_yday | int | 年内日期,取值范围0~365(0表示1月1日) |
| tm_isdst | int | 夏令时标志,正数表示夏令时,0表示非夏令时,负数表示未知 |
| __tm_gmtoff | long | 时区偏移量,单位为秒 |
| __tm_zone | const char * | 时区名称 |
struct itimerspec
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| it_interval | struct timespec | 定时器周期间隔,为0表示单次触发 |
| it_value | struct timespec | 首次到期时间,为0表示停止定时器 |