Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
linux有计算时间的函数吗_创想鸟

linux有计算时间的函数吗

linux有计算时间的函数,例如:可获取秒级时间差的函数time()、可获取微秒级时间差的函数gettimeofday()和settimeofday()、可获取纳秒级时间差的函数clock_gettime()等等。

linux有计算时间的函数吗

本教程操作环境:linux7.3系统、Dell G3电脑。

下面讲解的是linux中 时间相关的函数和将时间转换相关函数

1.获取时间相关函数

1.1 获取秒级时间差函数

#include time_t time(time_t *timer);//通过函数返回值或者timer 变量均可以获取到当前时间

time_t实际上是一个长整型,表示UTC时间(1970年1月1日0时0分0秒,Linux系统的Epoch时间)到当前系统时间的秒数级时间差

1.2 获取微秒级时间差函数

#include #include struct timeval {    time_t       tv_sec;     /* seconds */    suseconds_t tv_usec;    /* microseconds */};struct timezone{     int tz_minuteswest; /*miniutes west of Greenwich*/     int tz_dsttime; /*type of DST correction*/ };//函数执行成功返回0,失败返回-1. 其中timezone 是时区相关的结构体int gettimeofday(struct timeval *tv, struct timezone *tz);//用来设置制定的时间和时区信息int settimeofday(const struct timeval *tv, const struct timezone *gz);

1.3获取纳秒级时间差函数

#include /*其中clk_id 用来制定对应的时钟类型,不同的类型可以用来获取不同的时间值,具体有四种:CLOCK_REALTIME: 系统实时时间,从UTC开始计时,若时间被用户更改计数时间相应改变;CLOCK_MONOTONIC:从系统启动开始计时,即使用户更改时间也没有影响;CLOCK_PROCESS_CPUTIME_ID:本进程开始到执行到当前程序系统CPU花费的时间;CLOCK_THREAD_CPUTIME_ID:本线程开始到执行到当前程序系统CPU花费的时间*/struct timespec{    time_t tv_sec;    //s    long tv_nsec;    //ns};int clock_gettime(clockid_t clk_id, struct timespec* tp);

2.转换时间相关函数

2.1将上述获取时间函数获取到的时间参数time_t转换为结构体

struct tm,该结构体包含年月日等非常详细的域。下如所示:

#include  struct tm{    int tm_sec;   //秒    int tm_min;   //分    int tm_hour;  //时;取值区间为[0, 23]    int tm_mday;  //日;取值区间为[1, 31]    int tm_mon;   //月份;取值区间为[0, 11]; 0表示1月份依次递增到12月份    int tm_year;   //年份;其值为1900年至今年数    int tm_wday;  //星期;0代表星期天,1代表星期1,以此类推    int tm_yday;   //日期;0代表1月1日    int tm_isdst;   //夏令时标识符;使用夏令时为正,不使用t为0,不确定时为负*/};

将time_t转换成struct tm结构体常用的函数如下:

#include  struct tm* gmtime(const time_t* timep);struct tm*localtime(const time_t* timep);

gmtime() 和localtime() 函数可以将time_t 数据格式转化成tm格式的类型。区别是gmtime()转换的结果是GMT(中央时区)对应的信息,而localtime() 函数转换的结果是当前所在时区的信息。

2.2将time_t转换成我们习惯性使用的时间和日期字符串

美间AI 美间AI

美间AI:让设计更简单

美间AI 45 查看详情 美间AI

对应转换函数如下:

#include char* ctime(time_t* timep);

2.3 将struct tm 转换成 time_t

对应函数如下:

#include time_t mktime(struct tm *p_tm);

2.4将struct tm转换成我们习惯性使用的时间和日期字符串

对应函数如下:

#include char *asctime(const struct tm *p_tm); //习惯性字符串 Thu Dec  9 07:13:35 2021

2.5 将时间字符串转换成 struct tm格式

/**************************************** description: 将struct tm 按照指定的format格式转化成字符串** parameter:** *s : 需要被转换的时间字符串** *format:时间字符串的格式** *tm:转换后的tm时间**************************************/char *strptime(const char *s, const char *format, struct tm *tm);

2.6 将struct tm 按照指定的format格式转化成字符串

/**************************************** description: 将struct tm 按照指定的format格式转化成字符串** parameter:** *s : 生成的时间字符串** max: 字符串最大字符数(即最大可生成的字符数量)** *format:生成的字符串格式** *tm:需要被转换的tm时间**************************************/size_t strftime(char *s, size_t max, const char *format,const struct tm *tm);

3.举例

#include #include #include #include #include int main(int argc, char *argv[]){char *pstr = NULL;struct tm *ptm = NULL;printf("************** 使用ctime获取时间time_t **************n");time_t times = 0;time(&times);printf("time_t:%ldnn", times);printf("************** 使用ctime转换time_t成我们习惯性使用的时间和日期字符串 **************n");pstr = ctime(&times);printf("ctime:%sn", pstr);printf("************** 使用gmtime转换time_t成struct tm 时间和日期**************n");ptm = gmtime(&times);printf("time : %d:%d:%dn", ptm->tm_hour,  ptm->tm_min,  ptm->tm_sec);printf("date: %d:%d:%dn", ptm->tm_year+1900, ptm->tm_mon+1, ptm->tm_mday);printf("year: wday:%d yday:%d isdst:%dnn", ptm->tm_wday, ptm->tm_yday, ptm->tm_isdst);printf("************** 使用asctime转换struct tm成我们习惯性使用的时间和日期字符串**************n");pstr = asctime(ptm);printf("asctime:%snn", pstr);printf("************** 使用localtime转换time_t成struct tm 时间和日期**************n");ptm = localtime(&times);printf("time : %d:%d:%dn", ptm->tm_hour,  ptm->tm_min,  ptm->tm_sec);printf("date: %d:%d:%dn", ptm->tm_year+1900, ptm->tm_mon+1, ptm->tm_mday);printf("year: wday:%d yday:%d isdst:%dn", ptm->tm_wday, ptm->tm_yday, ptm->tm_isdst);pstr = asctime(ptm);printf("asctime:%snn", pstr);printf("************** 使用gettimeofday获取微秒级的时间**************n");struct timeval tv;struct timezone tz;gettimeofday(&tv, &tz);ptm = localtime(&tv.tv_sec);printf("time : %d:%d:%dn", ptm->tm_hour,  ptm->tm_min,  ptm->tm_sec);printf("date: %d:%d:%dn", ptm->tm_year+1900, ptm->tm_mon+1, ptm->tm_mday);printf("year: wday:%d yday:%d isdst:%dn", ptm->tm_wday, ptm->tm_yday, ptm->tm_isdst);printf("tv_usec:%ldnn", tv.tv_usec);printf("************** 使用clock_gettime获取纳秒级的时间**************n");struct timespec tp;clock_gettime(CLOCK_REALTIME, &tp);ptm = localtime(&tp.tv_sec);printf("time : %d:%d:%dn", ptm->tm_hour,  ptm->tm_min,  ptm->tm_sec);printf("date: %d:%d:%dn", ptm->tm_year+1900, ptm->tm_mon+1, ptm->tm_mday);printf("year: wday:%d yday:%d isdst:%dn", ptm->tm_wday, ptm->tm_yday, ptm->tm_isdst);printf("tp.tv_nsec:%ldnn", tp.tv_nsec);return 0;}

特定的时间字符相互转换

int str_to_time(void){char pstr[128] = {0};    struct tm t;    strptime("2021-04-23 12:34:56", "%Y-%m-%d %H:%M:%S", &t);    printf("**** tm_isdst: %d, tm_yday:%d, tm_wday%d,n %d-%d-%d n %d:%d:%dn",     t.tm_isdst, t.tm_yday, t.tm_wday, t.tm_year+1900, t.tm_mon+1, t.tm_mday,    t.tm_hour, t.tm_min, t.tm_sec);    printf("mktime ts:%ldn", mktime(&t));printf("asctime:%sn", asctime(&t));strftime(pstr, sizeof(pstr), "%Y-%m-%d %H:%M:%S", &t);    printf("pstr:%sn", pstr);}int time_to_str(void){char pstr[128] = {0};    struct tm t = {               .tm_sec = 56,    /* Seconds (0-60) */               .tm_min = 34,    /* Minutes (0-59) */               .tm_hour = 12,   /* Hours (0-23) */               .tm_mday = 23,   /* Day of the month (1-31) */               .tm_mon = 4-1,     /* Month (0-11) */               .tm_year = 2021-1900,   /* Year - 1900 */               .tm_wday = 5,     /* Day of the week (0-6, Sunday = 0) */               .tm_yday = 113,   /* Day in the year (0-365, 1 Jan = 0) */               .tm_isdst = 0,    /* Daylight saving time */           };    strftime(pstr, sizeof(pstr), "%Y-%m-%d %H:%M:%S", &t);    printf("pstr:%sn", pstr);}

若想获取从系统启动开始计时,即使用户更改时间也没有影响的时间,单位毫秒,举例如下:

unsigned long long clock_systick_get(void){    int ret = -1;    unsigned long long time;    int cnt = 0;    struct timespec  now = {0, 0};    while (ret < 0 && cnt < 3)    {        ret = clock_gettime(CLOCK_MONOTONIC, &now);//获取失败重试,最大执行3次        cnt++;    }    time = now.tv_sec * 1000 + now.tv_nsec / (1000000);    return time;}

相关推荐:《Linux视频教程》

以上就是linux有计算时间的函数吗的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/320644.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
JavaScript中的异步迭代器(Async Iterators)适用于哪些场景?
上一篇 2025年11月5日 09:43:29
应用商店无法连接到网络怎么办
下一篇 2025年11月5日 09:43:44

相关推荐

  • 笔记—Linux安装OpenCV及VSCode的配置编译

    笔记—Linux安装OpenCV及VSCode的配置编译笔记—Linux安装OpenCV及VSCode的配置编译笔记—Linux安装OpenCV及VSCode的配置编译笔记—Linux安装OpenCV及VSCode的配置编译

    在学习新技能的过程中,我选择了在linux系统上进行操作,这对于从未接触过linux的人来说是一个绝佳的学习机会。这篇文章记录了我在linux上安装opencv的过程。 我选择的Linux发行版是Ubuntu 20.04.3,并将其安装在Virtual Box虚拟机中。Ubuntu的相关资料丰富,选…

    2026年9月22日 • 用户投稿
    100
  • 群友不讲武德,编写命令来获取蘑菇积分?

    群友不讲武德,编写命令来获取蘑菇积分?群友不讲武德,编写命令来获取蘑菇积分?群友不讲武德,编写命令来获取蘑菇积分?群友不讲武德,编写命令来获取蘑菇积分?

    大家好,我是陌溪 最近蘑菇不是上线了签到功能嘛,用户每天可以登录蘑菇,然后打卡进行签到。 蘑菇签到 同时,为了考虑到小伙伴们可能会忘记签到,还特意做了补签功能 发放补签卡 每周一只要在蘑菇排行榜的小伙伴,就会发放 1~2 张签到卡 蘑菇排行榜 目前蘑菇排行榜主要是通过积分来进行排序的,为了鼓励大家多…

    2026年9月22日 • 用户投稿
    300
  • VSCode设置SSH远程开发(安全连接,跨平台开发指南)

    vscode的ssh远程开发功能通过ssh协议实现本地编辑器与远程服务器的安全连接,让用户能在本地直接操作远程代码,享受与本地一致的开发体验。首先需安装“remote – ssh”扩展并配置~/.ssh/config文件,定义host、hostname、user、port和identit…

    2026年9月22日
    000
  • 【工具分享】坐标转换工具

    内容简介 本文将介绍一个实用的坐标转换工具,帮助用户在GCJ-02和WGS84坐标系之间轻松转换数据。阅读完本文,您将了解如何获取此工具。工具获取方式将在文章末尾详细说明。 工具简介与参数介绍如图所示,工具界面简洁明了,包含三个参数,下面将对这三个参数进行简要介绍。 待转换图层此参数是工具的输入参数…

    2026年9月22日
    100
  • linux远程ssh连接不上?

    昨天下班回到家后,我试图连接linux来部署一个docker项目,却发现无法连接。 我对这类Linux问题的排查能力不足,只能通过错误信息在百度上搜索解决方案,但毫无效果。随后我想到可能是之前修改了配置文件,导致SSH服务出现问题。于是,我通过阿里云控制台使用救援连接,成功进入了SSH服务,并发现S…

    2026年9月22日
    200
  • python 基准测试(cProfile kcachegrind line_profiler memory_profiler)

    learn from 《python高性能(第2版)》 类似工具:pycharm profile对函数调用效率进行测试 1. 例子 一个圆周运动的动画 代码语言:javascript代码运行次数:0运行复制 from matplotlib import pyplot as pltfrom matpl…

    2026年9月22日
    200
  • VSCode安装C/C++开发环境 最新VSCode配置C语言教程详解

    答案:搭建VSCode的C/C++环境需安装编译器、C/C++扩展并配置项目文件。首先安装MinGW(Windows)、Clang(macOS)或GCC(Linux),配置环境变量并验证;然后在VSCode中安装Microsoft的C/C++扩展;最后创建.c_cpp_properties.json…

    2026年9月22日
    300
  • Linux平台下的Eclipse配置

    在linux平台上配置eclipse时,可能会遇到一些常见的问题和优化需求。本文将详细介绍如何解决这些问题,并提供优化eclipse的建议。 启动Eclipse报错 启动Eclipse时,如果遇到以下错误: A Java Runtime Environment (JRE) or Java Devel…

    2026年9月22日
    000
  • 常见分布式任务调度工具浅析

    一、背景 在日常业务中,经常会遇到需要在特定时间执行任务或周期性执行任务的需求。这些任务通常被归类为定时任务。为了满足这种需求,各种任务调度框架应运而生,如Timer、ScheduledThreadPoolExecutor(没错,它也可以用于定时任务)、Quartz等。然而,随着分布式和微服务的发展…

    2026年9月22日
    200
  • VSCode安全更新机制解析

    VSCode通过自动检查、数字签名验证和用户可控策略确保更新安全。启动时后台定期HTTPS请求检查新版本,每日一次;安装包经平台特定签名(Windows Authenticode、macOS代码签名、Linux GPG)验证完整性;用户可选自动更新、提示或关闭,企业可集中管控;微软通过安全入口响应漏…

    2026年9月22日
    200
  • Linux系统中文件属性和权限实战操作

    Linux系统中文件属性和权限实战操作Linux系统中文件属性和权限实战操作Linux系统中文件属性和权限实战操作Linux系统中文件属性和权限实战操作

    —–原本今天的文章是昨天晚上就要更新的,但是由于昨天晚上下班回到住的地方,发现停电了,所以就没写成。今天是在上一篇文章–linux系统中文件类型的基础上,继续进行深入的学习。好了,直接开干。 一、文件的操作权限: 1、在这之前我想还是很有必要介绍对文件的操作权限(…

    2026年9月22日 • 用户投稿
    300
  • 如何在Linux命令行中进行文件查找?

    最常用Linux查找文件方法是使用find命令。按名称搜索用-name选项,如find . -name “*.log”;忽略大小写用-iname;按类型查用-type f(文件)或d(目录);按大小查用-size,如+100M表示大于100MB;按修改时间用-mtime,-7…

    2026年9月22日
    000
  • VSCode配置C语言调试环境 从零开始VSCode搭建C开发工具

    要从零开始在#%#$#%@%@%$#%$#%#%#$%@_e2fc++805085e25c9761616c00e065bfe8中搭建c语言开发和调试环境,首先需安装vscode本体、c/c++编译器(如mingw或gcc)并配置系统环境变量,接着安装vscode的c/c++扩展,然后创建项目并编写c…

    2026年9月22日
    100
  • 每个 Linux 用户都应该知道的 5 个简单的 Bash 历史技巧

    每个 Linux 用户都应该知道的 5 个简单的 Bash 历史技巧每个 Linux 用户都应该知道的 5 个简单的 Bash 历史技巧每个 Linux 用户都应该知道的 5 个简单的 Bash 历史技巧每个 Linux 用户都应该知道的 5 个简单的 Bash 历史技巧

    无论您是bash 初学者还是专家,如果不使用超级有用的 bash 历史记录功能,您将无法继续在命令行中工作。 您可能已经知道,如果您在 Linux 终端中使用向上或向下箭头键,您可以查看之前运行的命令。 这要归功于bash history 命令。 1.查看您的 bash 历史记录 查看您之前键入的命…

    2026年9月22日 • 用户投稿
    000
  • VSCode搭建Python开发环境(附详细截图,小白也能学会)

    答案:搭建VSCode Python环境需安装Python并添加至PATH,安装VSCode及Python扩展,创建项目文件并选择正确解释器,通过虚拟环境隔离依赖,利用Pylance、Black、Flake8等工具提升开发效率,常见问题多为路径或环境配置错误,可通过检查解释器选择和安装路径解决。 在…

    2026年9月22日
    100
  • Vision Transformer 必读系列之图像分类综述(三): MLP、ConvMixer 和架构分析

    Vision Transformer 必读系列之图像分类综述(三): MLP、ConvMixer 和架构分析Vision Transformer 必读系列之图像分类综述(三): MLP、ConvMixer 和架构分析Vision Transformer 必读系列之图像分类综述(三): MLP、ConvMixer 和架构分析Vision Transformer 必读系列之图像分类综述(三): MLP、ConvMixer 和架构分析

    号外号外!awesome-vit 上新啦, 欢迎大家 Star Star Star ~ https://github.com/open-mmlab/awesome-vit 前言 在 Vision Transformer 必读系列之图像分类综述(一):概述 一文中对 Vision Transforme…

    2026年9月22日 • 用户投稿
    300
  • 解决PHP应用中本地文件更新后网页视图不刷新的缓存问题

    本文探讨了PHP应用中,本地JSON或图片文件更新后,网页视图无法实时刷新的常见问题。核心原因在于浏览器缓存机制。文章将提供多种解决方案,包括强制刷新、隐身模式诊断、以及通过URL参数、服务器配置(.htaccess)和文件版本控制来有效管理缓存,确保用户始终获取最新数据。 理解问题:本地文件更新与…

    2026年9月22日
    300
  • VSCode安装C/C++代码格式化 专业VSCode开发环境配置

    配置VSCode进行C/C++开发需安装C/C++扩展包和clang-format,设置自动格式化与调试环境,推荐使用CMake Tools、Include Autocomplete等扩展,结合快捷键、代码片段和任务自动化提升效率。 配置VSCode以实现C/C++代码的专业格式化和高效开发环境,核…

    2026年9月22日
    500
  • Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)

    could not find doxygen (missing: doxygen_executable)  使用cmake .. 有时候会遇到如下问题: 代码语言:javascript代码运行次数:0运行复制 $ cmake ..– The CXX compiler identification …

    2026年9月22日
    100
  • MySQL自动化备份如何实现_适合企业级部署吗?

    MySQL自动化备份如何实现_适合企业级部署吗?MySQL自动化备份如何实现_适合企业级部署吗?MySQL自动化备份如何实现_适合企业级部署吗?MySQL自动化备份如何实现_适合企业级部署吗?

    mysql的自动化备份对企业级部署是必要的,且可通过多种方式实现。1. 使用mysqldump+定时任务(crontab)是最基础的方式,操作简单适合中小规模数据库,但备份时可能锁表影响业务;2. 增量备份结合二进制日志(binary log)更高效,适用于频繁变更的数据,支持精确恢复到某时间点;3…

    2026年9月21日 • 用户投稿
    200

发表回复

登录后才能评论
关注微信