Linux应用开发(3):Linux时间操作(time、mktime、localtime等)

1. 简述

在Linux系统中,时间操作函数是编程中经常使用的一部分,它们允许程序获取和设置系统时间,以及对时间进行各种处理。以下是一些常用的时间操作函数的详细介绍。

2. 时间操作

(1)time(): 获取1970年1月1日以来的总的秒计数

time() 函数是时间操作中最基础的函数之一,它返回自1970年1月1日(UTC)以来的秒数。这个时间点也被称为Unix纪元或Epoch。

复制代码
#include <time.h>

time_t time(time_t *timer);

timer 参数是一个可选的指针,如果提供了这个参数,time() 会将当前的UTC时间存储在 timer 指向的位置。

函数返回当前的UTC时间(time_t类型),如果出现错误,则返回 -1。

(2)localtime(): 转换为本地时间(本地时区)

localtime() 函数将UTC时间转换为本地时间,并将其存储在 tm 结构中。

复制代码
#include <time.h>

struct tm *localtime(const time_t *timer);

struct tm结构体如下。

timer 参数是一个指向 time_t 类型的指针,指向要转换的UTC时间。

函数返回一个指向 tm 结构的指针,其中包含了转换后的本地时间信息。

(3)gmtime(): 转换为本地时间(0时区)

gmtime() 函数将UTC时间转换为本地时间,并将其存储在 tm 结构中。与localtime不同的是,gmtime是转换为0时区的本地时间。

复制代码
#include <sys/time.h>

struct tm *gmtime(const time_t *timer);

(4)mktime():将本地时间转换为UTC时间

mktime() 函数将本地时间转换为UTC时间,功能上与localtime() 互为逆操作。

复制代码
#include <time.h>

time_t mktime(struct tm *timeptr);

timeptr 参数是一个指向 tm 结构的指针,该结构包含了本地时间信息。

函数返回转换后的UTC时间(time_t类型)。如果 tm 结构中的日期无效,则返回 -1。

(5)gettimeofday(): 获取高精度时间

gettimeofday() 函数用于获取当前时间的更高精度(通常是微秒级)。

复制代码
#include <sys/time.h>


int gettimeofday(struct timeval *tv, struct timezone *tz);

struct timeval {

    time_t tv_sec;     // 秒

    suseconds_t tv_usec; // 微秒

};

struct timezone {

    int tz_minuteswest; // 与UTC的时差(分钟)

    int tz_dsttime;     // 夏令时信息

};

tv 参数是一个指向 timeval 结构的指针,用于存储当前的时间信息。

tz 参数是一个可选的指向 timezone 结构的指针,用于存储有关时区和夏令时的信息。

函数返回0表示成功,返回-1表示错误。

(6)settimeofday:设置时间

settimeofday() 函数用于设置系统时钟的时间。这个函数在大多数系统上已经被废弃,因为它允许未经授权的修改系统时间,可能会带来安全问题。

复制代码
#include <sys/time.h>

int settimeofday(const struct timeval *tv, const struct timezone *tz);

tv 参数是一个指向 timeval 结构的指针,包含了要设置的新时间。

tz 参数是一个指向 timezone 结构的指针,包含了时区信息。

函数返回0表示成功,返回-1表示错误。

相关推荐
wdfk_prog10 小时前
[Linux]学习笔记系列 -- [drivers][input]input
linux·笔记·学习
盟接之桥10 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
忆~遂愿11 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能
湘-枫叶情缘11 小时前
1990:种下那棵不落叶的树-第6集 圆明园的对话
linux·系统架构
Fcy64812 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满12 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠12 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Gary Studio12 小时前
rk芯片驱动编写
linux·学习
mango_mangojuice12 小时前
Linux学习笔记(make/Makefile)1.23
java·linux·前端·笔记·学习
Harvey90312 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s