返回顶部
首页 > 资讯 > 操作系统 >linux是否有计算时间的函数
  • 435
分享到

linux是否有计算时间的函数

linux 2023-04-20 05:04:13 435人浏览 薄情痞子
摘要

这篇“linux是否有计算时间的函数”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“linu

这篇“linux是否有计算时间的函数”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“linux是否有计算时间的函数”文章吧。

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

1.获取时间相关函数

1.1 获取秒级时间差函数

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

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

1.2 获取微秒级时间差函数

#include <sys/time.h>
#include <unistd.h>
struct timeval {
    time_t       tv_sec;     
    suseconds_t tv_usec;    
};

struct timezone{
 
    int tz_minuteswest; 
 
    int tz_dsttime; 
 
};

//函数执行成功返回0,失败返回-1. 其中timezone 是时区相关的结构体
int gettimeofday(struct timeval *tv, struct timezone *tz);

//用来设置制定的时间和时区信息
int settimeofday(const struct timeval *tv, const struct timezone *gz);

1.3获取纳秒级时间差函数

#include <time.h>



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 <time.h>
 
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 <time.h> 
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转换成我们习惯性使用的时间和日期字符串

对应转换函数如下:

#include <time.h>
char* ctime(time_t* timep);

2.3 将struct tm 转换成 time_t

对应函数如下:

#include <time.h>
time_t mktime(struct tm *p_tm);

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

对应函数如下:

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

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


char *strptime(const char *s, const char *fORMat, struct tm *tm);

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


size_t strftime(char *s, size_t max, const char *format,const struct tm *tm);

3.举例

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <time.h>
#include <sys/time.h>

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:%ld\n\n", times);
	
	printf("************** 使用ctime转换time_t成我们习惯性使用的时间和日期字符串 **************\n");
	pstr = ctime(&times);
	printf("ctime:%s\n", pstr);
	
	printf("************** 使用gmtime转换time_t成struct tm 时间和日期**************\n");
	ptm = gmtime(&times);
	printf("time : %d:%d:%d\n", ptm->tm_hour,  ptm->tm_min,  ptm->tm_sec);
	printf("date: %d:%d:%d\n", ptm->tm_year+1900, ptm->tm_mon+1, ptm->tm_mday);
	printf("year: wday:%d yday:%d isdst:%d\n\n", ptm->tm_wday, ptm->tm_yday, ptm->tm_isdst);
	
	printf("************** 使用asctime转换struct tm成我们习惯性使用的时间和日期字符串**************\n");
	pstr = asctime(ptm);
	printf("asctime:%s\n\n", pstr);
	
	printf("************** 使用localtime转换time_t成struct tm 时间和日期**************\n");
	ptm = localtime(&times);
	printf("time : %d:%d:%d\n", ptm->tm_hour,  ptm->tm_min,  ptm->tm_sec);
	printf("date: %d:%d:%d\n", ptm->tm_year+1900, ptm->tm_mon+1, ptm->tm_mday);
	printf("year: wday:%d yday:%d isdst:%d\n", ptm->tm_wday, ptm->tm_yday, ptm->tm_isdst);

	pstr = asctime(ptm);
	printf("asctime:%s\n\n", pstr);

	printf("************** 使用gettimeofday获取微秒级的时间**************\n");
	struct timeval tv;
	struct timezone tz;
	gettimeofday(&tv, &tz);
	ptm = localtime(&tv.tv_sec);
	printf("time : %d:%d:%d\n", ptm->tm_hour,  ptm->tm_min,  ptm->tm_sec);
	printf("date: %d:%d:%d\n", ptm->tm_year+1900, ptm->tm_mon+1, ptm->tm_mday);
	printf("year: wday:%d yday:%d isdst:%d\n", ptm->tm_wday, ptm->tm_yday, ptm->tm_isdst);
	printf("tv_usec:%ld\n\n", tv.tv_usec);
	
	printf("************** 使用clock_gettime获取纳秒级的时间**************\n");
	struct timespec tp;
	clock_gettime(CLOCK_REALTIME, &tp);
	ptm = localtime(&tp.tv_sec);
	printf("time : %d:%d:%d\n", ptm->tm_hour,  ptm->tm_min,  ptm->tm_sec);
	printf("date: %d:%d:%d\n", ptm->tm_year+1900, ptm->tm_mon+1, ptm->tm_mday);
	printf("year: wday:%d yday:%d isdst:%d\n", ptm->tm_wday, ptm->tm_yday, ptm->tm_isdst);	
	printf("tp.tv_nsec:%ld\n\n", 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:%d\n", 
    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:%ld\n", mktime(&t));
	printf("asctime:%s\n", asctime(&t));
	
	strftime(pstr, sizeof(pstr), "%Y-%m-%d %H:%M:%S", &t);
    printf("pstr:%s\n", pstr);
}

int time_to_str(void)
{
	char pstr[128] = {0};
    struct tm t = {
               .tm_sec = 56,    
               .tm_min = 34,    
               .tm_hour = 12,   
               .tm_mday = 23,   
               .tm_mon = 4-1,     
               .tm_year = 2021-1900,   
               .tm_wday = 5,     
               .tm_yday = 113,   
               .tm_isdst = 0,    
           };
    strftime(pstr, sizeof(pstr), "%Y-%m-%d %H:%M:%S", &t);
    printf("pstr:%s\n", 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是否有计算时间的函数”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程服务器栏目。

--结束END--

本文标题: linux是否有计算时间的函数

本文链接: https://lsjlt.com/news/201686.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • linux是否有计算时间的函数
    这篇“linux是否有计算时间的函数”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“linu...
    99+
    2023-04-20
    linux
  • Oracle计算时间跨度的函数
    显示距离当前时间的跨度-- 计算时间跨度:返回值为X天y时z分declare  ln_day_count      number(10);  ln_hour...
    99+
    2024-04-02
  • Oracle计算时间差常用函数
    Oracle计算时间差常用函数两个Date类型字段:START_DATE,END_DATE,计算这两个日期的时间差(分别以天,小时,分钟,秒,毫秒):天:ROUND(TO_NUMBER(END_DATE -...
    99+
    2024-04-02
  • Linux时间函数有哪些
    这篇“Linux时间函数有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Linux时间函数有哪些”文章吧。一、linux...
    99+
    2023-06-28
  • linux有没有获取时间的函数
    本篇内容介绍了“linux有没有获取时间的函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!linux有获取时间的函数。linux常用的时间...
    99+
    2023-06-30
  • linux有获取时间的函数吗
    是的,Linux有多个函数可用于获取时间。以下是一些常用的函数:1. time()函数:返回自UTC 1970年1月1日以来经过的秒...
    99+
    2023-08-25
    linux
  • VB计算两个日期/时间之间的差(DateDiff函数)
    在VB中,可以使用`DateDiff`函数来计算两个日期/时间之间的差值。该函数的语法如下:```vbDateDiff(interv...
    99+
    2023-09-16
    VB
  • linux内核是否有main函数
    本篇内容主要讲解“linux内核是否有main函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux内核是否有main函数”吧!linux内核有main函数;main函数是程序的入口,ma...
    99+
    2023-07-05
  • 创建SQL函数计算员工加班时间
    你好,韩老师有个问题请教。我想通过秒计算加班时间。规则为:加班满4小时才算加班,加班时间满8小时为加班一天,加班时间不足4小时不算加班,加班时间大于4小时小于8小时为0.5个加班。我写了一个自定义函数计算但...
    99+
    2024-04-02
  • python如何快速计算函数运行时间
    这篇文章主要介绍python如何快速计算函数运行时间,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!如何快速计算函数运行时间计算一个函数的运行时间,你可能会这样子做import time  ...
    99+
    2023-06-27
  • JavaScript时间函数和数学运算函数有哪些
    今天小编给大家分享一下JavaScript时间函数和数学运算函数有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,...
    99+
    2024-04-02
  • PHP时间函数简介:实现时间计算和日期显示
    PHP时间函数简介:实现时间计算和日期显示 在PHP中,时间函数是非常重要的,可以帮助我们进行时间的计算、日期的显示以及各种时间操作。本文将介绍几个常用的PHP时间函数,并给出具体的代...
    99+
    2024-03-01
    时间计算 日期显示 php 时间函数
  • Python装饰器实现函数运行时间的计算
    目录个人理解例子:调用函数的同时对函数进行计时实现方法1:@语法糖代码:实现结果:实现方法2:闭包代码:实现结果:实现方式1和 2的差异总结个人理解 装饰器: 通过闭包和将一个函数作...
    99+
    2024-04-02
  • Python实现计算函数或程序执行时间
    目录一、需求说明二、需求分析三、实现方法3.1、获取执行时间方式一3.2、获取执行时间方式二一、需求说明 在Python程序的开发过程中,一些程序需要获取函数或程序的开始时间、结束时...
    99+
    2023-02-10
    Python计算函数执行时间 Python计算程序执行时间 Python 执行时间 Python 时间
  • MySQL中时间差函数、日期转换计算函数怎么用
    这篇文章将为大家详细讲解有关MySQL中时间差函数、日期转换计算函数怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. 时间差函数(TIMESTAMPDIFF、DA...
    99+
    2024-04-02
  • PHP 函数在 Linux 上的性能是否会影响 LeetCode 的时间复杂度?
    随着人工智能技术的不断发展,算法竞赛已经成为了程序员们不可或缺的一部分。LeetCode 是一个非常受欢迎的算法竞赛网站,拥有大量的问题和解决方案。然而,对于 PHP 开发人员来说,一个常见的问题是: 在本文中,我们将探讨这个问题,从而帮...
    99+
    2023-06-13
    函数 linux leetcode
  • Shell时间运算及时间差的计算方法
    本篇内容主要讲解“Shell时间运算及时间差的计算方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Shell时间运算及时间差的计算方法”吧!一、时间加减这里处理方法,是将基础的时间转变为时间戳...
    99+
    2023-06-09
  • python 时间差的计算
    import time import datetime start = datetime.datetime.now() time.sleep(30) end = datetime.datetime.now() print (end-s...
    99+
    2023-01-31
    时间差 python
  • 在linux下玩转带有超时时间的connect函数
    在之前的文章中,我们在Windows下玩过带有超时时间的,本文我们在linux下来玩。在某次面试中,还被遇到了这个问题,有意思。 直接上客户端代码: #include <unistd.h> #includ...
    99+
    2022-06-04
    linux下connect函数 在linux下玩转带有超时时间的connect函数
  • PHP时间戳函数实现时间转换和计算功能的方法总结
    PHP时间戳函数是一种非常常用和强大的功能,它可以用于时间的转换和计算。在这篇文章中,我将总结一下PHP时间戳函数的使用方法和一些相关的注意事项。PHP时间戳函数主要有两个:time() 和strtotime()。time()函数返回当前的...
    99+
    2023-11-20
    函数 时间戳 转换
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作