linux中与时间处理相关的函数

  最近在查关于Linux下时间编程的问题:

       1. Linux下与时间有关的结构体
        struct timeval
       {  
           int tv_sec;  
           int tv_usec;  
       };  
       其中tv_sec是由凌晨开始算起的秒数,tv_usec则是微秒(10E-6 second)。  

       struct timezone
       {  
           int tv_minuteswest;  
           int tv_dsttime;  
       };  
       tv_minuteswest是格林威治时间往西方的时差,tv_dsttime则是时间的修正方式。  

       struct timespec  
       {  
           long int tv_sec;  
           long int tv_nsec;  
       };  
       tv_nsec是nano second(10E-9 second)。  

       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;  
       };  
       tm_sec表「秒」数,在[0,61]之间,多出来的两秒是用来处理跳秒问题用的。  
        tm_min表「分」数,在[0,59]之间。  
       tm_hour表「时」数,在[0,23]之间。  
       tm_mday表「本月第几日」,在[1,31]之间。  
       tm_mon表「本年第几月」,在[0,11]之间。  
       tm_year要加1900表示那一年。  
       tm_wday表「本第几日」,在[0,6]之间。  
       tm_yday表「本年第几日」,在[0,365]之间,闰年有366日。  
       tm_isdst表是否为「日光节约时间」。  

       struct  itimerval
       {
         struct  timeval it_interval;
         struct  timeval it_value;
       };
       it_interval成员表示间隔计数器的初始值,而it_value成员表示间隔计数器的当前值。

        2.获得当前时间
       在所有的UNIX下,都有个time()的函数  
      time_t time(time_t *t);
      这个函数会传回从epoch开始计算起的秒数,如果t是non-null,它将会把时间值填入t中。  

       对某些需要较高精准度的需求,Linux提供了gettimeofday()。  
      int gettimeofday(struct timeval * tv,struct timezone *tz);  
      int settimeofday(const struct timeval * tv,const struct timezone *tz);  

      struct tm格式时间函数  

      struct tm * gmtime(const time_t * t);  
      转换成格林威治时间。有时称为GMT或UTC。  

      struct tm * localtime(const time_t *t);  
      转换成本地时间。它可以透过修改TZ环境变数来在一台机器中,不同使用者表示不同时间。  

      time_t mktime(struct tm *tp);  
      转换tm成为time_t格式,使用本地时间。  

      tme_t timegm(strut tm *tp);  
      转换tm成为time_t格式,使用UTC时间。  

      double difftime(time_t t2,time_t t1);  
      计算秒差。  

      3.文字时间格式函数  

      char * asctime(struct tm *tp);  
      char * ctime(struct tm *tp);  
      这两个函数都转换时间格式为标准UNIX时间格式。  
      Mon May 3 08:23:35 1999  

      ctime一率使用当地时间,asctime则用tm结构内的timezone资讯来表示。  

      size_t strftime(char *str,size_t max,char *fmt,struct tm *tp);  
      strftime有点像sprintf,其格式由fmt来指定。  

      %a : 本第几天名称,缩写。  
      %A : 本第几天名称,全称。  
      %b : 月份名称,缩写。  
      %B : 月份名称,全称。  
      %c : 与ctime/asctime格式相同。  
      %d : 本月第几日名称,由零算起。  
      %H : 当天第几个小时,24小时制,由零算起。  
      %I : 当天第几个小时,12小时制,由零算起。  
      %j : 当年第几天,由零算起。  
      %m : 当年第几月,由零算起。  
      %M : 该小时的第几分,由零算起。  
      %p : AM或PM。  
      %S : 该分钟的第几秒,由零算起。  
      %U : 当年第几,由第一个日开始计算。  
      %W : 当年第几,由第一个一开始计算。  
      %w : 当第几日,由零算起。  
      %x : 当地日期。  
      %X : 当地时间。  
      %y : 两位数的年份。  
      %Y : 四位数的年份。  
      %Z : 时区名称的缩写。  
      %% : %符号。  

      char * strptime(char *s,char *fmt,struct tm *tp);  
      如同scanf一样,解译字串成为tm格式。  

      %h : 与%b及%B同。  
      %c : 读取%x及%X格式。  
      %C : 读取%C格式。  
      %e : 与%d同。  
      %D : 读取%m/%d/%y格式。  
      %k : 与%H同。  
      %l : 与%I同。  
      %r : 读取"%I:%M:%S %p"格式。  
      %R : 读取"%H:%M"格式。  
      %T : 读取"%H:%M:%S"格式。  
      %y : 读取两位数年份。  
      %Y : 读取四位数年份。  

      下面举一个小例子,说明如何获得系统当前时间:
          time_t now;
          struct tm  *timenow;
          char strtemp[255];
      
          time(&now);
          timenow = localtime(&now);
          printf("recent time is : %s /n", asctime(timenow)); 

 

时间: 2024-07-28 19:29:25

linux中与时间处理相关的函数的相关文章

浅析Linux中的时间编程和实现原理(一) Linux应用层的时间编程

引子 我们都生活在时间中,但却无法去思考它.什么是时间呢?似乎这是一个永远也不能被回答的问题.然而作为一个程序员,在工作中,总有那么几次我必须思考什么是时间.比如,需要知道一段代码运行了多久:要在 log 文件中记录事件发生时的时间戳:再比如需要一个定时器以便能够定期做某些计算机操作.我发现,在计算机世界中,时间在不同场合也往往有不同的含义,让试图思考它的人感到迷茫.但值得庆幸的是,Linux 中的时间终究是可以理解的.因此我打算讨论一下有关时间的话题,尝试着深入理解 Linux 系统中 C 语

Linux中进程前后台切换相关命令

我们使用Linux时大多数是用shell命令行.一个命令窗口是无法直接执行多任务的.我们可以把某个任务先切到后台,再切别的任务到前台来操作.这个帖子整理一下这些常用的命令. 后台进程查看: jobs是用于后台进程查看的很方便的命令. jobs -l 可以显示出进程的pid. 注意一点:shell收到了SIGHUP信号后在退出前将SIGHUP转发给所有的作业(jobs).jobs由于收到SIGHUP而终止运行.(这取决于shell的) 将前台任务放到后台: 按下ctrl + z ,就将任务移到后台

浅析Linux中的时间编程和实现原理(三) Linux内核的工作

引子 时间系统的工作需要软硬件以及操作系统的互相协作,在上一部分,我们已经看到大多数时间函数都依赖内核系统调用,GlibC 仅仅做了一次请求的转发.因此必须深入内核代码以便了解更多的细节. 内核自身的正常运行也依赖于时钟系统.Linux 是一个典型的分时系统,CPU 时间被分成多个时间片,这是多任务实现的基础.Linux 内核依赖 tick,即时钟中断来进行分时. 为了满足应用和内核自己的需求,内核时间系统必须提供以下三个基本功能: 提供系统 tick 中断(驱动调度器,实现分时) 维护系统时间

Linux中同步时间和时区的设置方法

第一.修改北京时区 这里老左以修改北京时间作为默认时区,如果有其他需要的,可以对应修改.  代码如下 复制代码 rm -rf /etc/localtime #先删除默认的时区设置 ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #替换上海/北京作为默认 第二.手工修改当前系统的时间  代码如下 复制代码 date -s '14:48:00 2014-12-29' 这里,老左就修改为当前的时间. 第三.设置同步时间  代码如下 复制代码

浅析Linux中的时间编程和实现原理(二)硬件和GLibC库的细节

引子 熟悉了基本的编程方法之后,我们的兴趣就在于,计算机如何实现这一切的呢?在那些应用层 API 和底层系统硬件之间,操作系统和库函数究竟做了些什么? 首先看下 Linux 时间处理的一般过程: 图 1. 时间处理过程 应用程序部分已经在第一部分详细介绍过了,在第二部分我将介绍硬件和 GlibC 相关实现的一些概况. 硬件 PC 机里常见的时钟硬件有以下这些. RTC (Real Time Clock,实时时钟) 人们需要知道时间的时候,可以看看钟表.计算机系统中钟表类似的硬件就是外部时钟.它依

Linux中使用C语言的fork()函数创建子进程的实例教程_C 语言

一.fork入门知识一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事. 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间.然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同.相当于克隆了一个自己.   我们来看一个例子: #include <unistd.h> #include &l

浅析Linux中的时间编程和实现原理(四)Linux 内核的工作

回顾 近年来,随着 Linux 的广泛使用,对时间编程提出了更高的要求.实时应用.多媒体软件对时钟和定时器的精度要求不断提高,在早期 Linux 内核中,定时器所能支持的最高精度是一个 tick.为了提高时钟精度,人们只能提高内核的 HZ 值 (一个内核参数,代表内核时钟中断的频率).更高的 HZ 值,意味着时钟中断更加频繁,内核要花更多的时间进行时钟处理.而内核的任何工作对于应用来说纯粹是无益的开销.当 HZ 值提高到 1000 之后,如果继续提高,Linux 的可用性将下降. 另外一方面,我

WordPress主题制作中自定义头部的相关PHP函数解析_php技巧

header_image()header_image() 函数是 WordPress 自定顶部图像的标准接口函数,该函数可以自动判断后台设置,并返回字符串形式的用户自定义顶部图像地址.本文主要涉及该函数的详解及使用. [Display header image path.] 即,显示顶部图像地址. 使用 复制代码 代码如下: <img src="<?php header_image(); ?>" width="<?php echo $header_im

WordPress开发中自定义菜单的相关PHP函数使用简介_php技巧

函数意义wp_nav_menu () 自定义菜单显示函数 register_nav_menu () 自定义菜单注册函数 – 单数 register_nav_menus () 自定义菜单注册函数 – 复数 (很蛋疼的一个复数形式) 以下举例均用 register_nav_menus () 这个复数形式,以免混淆. 使用位置register_nav_menus () function.php 文件中,用于注册自定义菜单在后台的代码调用名称和后台显示名称. wp_nav_menu () 主题任意你想调