linux c语言获取时间

在程序中,经常需要输出系统的当前时间、计算程序的执行时间、使用计时器等。

一、时间的类型

1.格林威治标准时间

coordinated universal time(UTC)是世界标准时间,即常说的格林威治标准时间(greenwich mean time,GMT).

2.日历时间

日历时间(calendar time)是用"一个标准时间点(如1970年1月1日0点)到此时经过的秒数"来表示的时间.

二、时间函数的API

时间函数的API均属于系统调用函数.。

1.获取日历时间

  #include <time.h>

  time_t time(time_t *tloc)

  函数功能:获取日历时间,即从1970年1月1日0点到现在所经历的秒数.

  参数:通常设置为NULL

(time_t在time.h中定义:typedef long int time_t)

  例:

  #include <time.h>

  int main(int argc,char *argv[])

  {

     int seconds=0;

     seconds = time(NULL);

     printf("seconds=%d\n",seconds);

 }

执行结果:

[root@localhost Time]# ./time

seconds=1294908511

通常用户得到日历时间的秒数没有实际的意义,但可以为时间转化做一些铺垫性质的工作.为了更好的利用时间,用户需要将这些秒数转化为更容易接受的时间表示方式,这些表示时间的方式有格林威治时间、本地时间等.

2.将日历时间转换为格林威治标准时间

   struct tm *gmtime(const time_t *timep)

   函数功能:将日历时间转化为格林威治标准时间,并保存在tm结构

   参数:日历时间的返回值

3.将日历时间转化为本地时间

   struct tm* localtime(const time_t *timep)

   函数功能:将日历时间转化为本地时间,并保存至tm结构

   参数:日历时间的返回值

  由上面两个函数可以看出,这两个函数的返回值均存放在tm结构中,具体的tm结构如下:

   struct tm

   {

      int tm_sec;   //秒值

      int tm_min;   //分钟值

      int tm_hour;  //小时值

      int tm_mday;  //本月第几日

      int tm_mon;   //本年第几月

      int tm_year;  //tm_year+1900=哪一年

      int tm_wday;  //本周第几日

      int tm_yday;  //本年第几日

      int tm_isdst; //日光节约时间

   }

   建立time.c

   #include <stdio.h>

   #include <time.h>

   int main(int argc,char *argv[])

   {

 struct tm *local;

     time_t t;

     t = time(null);   //获取日历时间

     local = localtime(&t);  //将日历时间转化为本地时间,并保存在struct tm结构中

     printf("local hour is :%d\n",local->tm_hour);

     local = gmtime(&t);  //将日历时间转化为格林威治时间,并保存在struct tm结构中

     printf("utc hour is :%d\n",local->tm_hour);

     return 0;

   }

   执行结果:

[root@localhost Time]# gcc –o time time.c

[root@localhost Time]# ./time

Local hour is: 0

UTC hour is: 8

[root@localhost Time]# date

Thu Jan 13 00:52:44 PST 2011

 利用函数gmtime()、localtime()可以将日历时间转化为格林威治时间和本地时间,虽然用户可通过结构体tm来获取

这些时间值,但看起来还不方便,最好是将所有的信息,如年、月、日、星期、时、分、秒以字符串的形式显示出来,

这样就加直观.

4.时间显示

   char *asctime(const struct tm *tm)

   函数功能:将tm格式的时间转化为字符串

   参数:日历时间的返回值

   例如: SAT Jul 30 08:43:03 2005

该函数较ctime()使用起来更加的复杂.必须按照下面3个步骤来进行.

   <1>使用函数time()来获取日历时间

   <2>使用函数gmtime()将日历时间转化为格林威治标准时间

   <3>使用函数asctime()将tm格式的时间转化为字符串

   例程:

    #include <time.h>

    #include <stdio.h>

    int main(void)

   {

      struct tm *ptr;

      time_t lt;

      lt=time(null); 

      ptr=gmtime(&lt);

      printf(asctime(ptr));

      printf(ctime(&lt));

      return 0;

   }

   char *ctime(const time_t *timep)

   函数功能:将日历时间转化为本地时间的字符串形式

   参数:日历时间的返回值

   该函数较asctime()使用起来更加简单.必须按照下面2个步骤来进行.

   <1>使用函数time()来获取日历时间

   <2>使用函数ctime()将日历时间直接转化为字符串

  5.获取从今日凌晨到现在的时间差

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

   函数功能:获取从今日凌晨(0:0:0)到现在的时间差,常用于计算事件耗时

   参数1:存放从今日凌晨(0:0:0)到现在的时间差,时间差以秒或微秒为单位,以结构体形式存放

         struct timeval

        {

           int tv_sec;    //秒数

           int tv_usec;   //微秒数

        }

   参数2:常设置为null

   函数用法:可以在做某件事情之前调用gettimeofday(),在做完该件事情之后调用gettimeofday(),两个函数的参数1

的差就是做该事情所消耗的时间.

   例程:计算函数function()的耗时

    time.c

    #include <sys/time.h>

    #include <stdio.h>

    #include <stdlib.h>

    #include <math.h>

    void function()  

   {

      unsigned int i,j;

      double y;

      for(i=0;i<1000;i++)

        for(j=0;j<1000;j++)

         y++;

   }

   void main()

  {

      struct timeval tpstart,tpend;

      float timeuse;

      gettimeofday(&tpstart,null); // 开始时间

      function();

      gettimeofday(&tpend,null);   // 结束时间

  // 计算执行时间,以微秒为单位进行计算

      timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec)+tpend.tv_usec-tpstart.tv_usec;

      timeuse/=1000000;

      printf("used time:%f\n",timeuse);

      exit(0);

  }

 执行结果:

 [root@localhost lishuai]# gcc time.c -o time -wall

 [root@localhost lishuai]# ./time

    use time:0.006288

6.延时函数

   <1>使程序睡眠seconds秒

      unsigned int sleep(unsigned int seconds)

   函数功能:使程序睡眠seconds秒

   参数:需要休眠的秒数

   <2>使程序睡眠usec微秒

      void usleep(unsigned long usec)

   函数功能:使程序睡眠usec微秒

   参数:需要休眠的秒数

转载于:https://www.cnblogs.com/Charles-Zhang-Blog/archive/2013/05/10/3071229.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401581.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

source insight快捷键及使用技巧

source insight快捷键及使用技巧 退出程序 : AltF4 重画屏幕 : CtrlAltSpace 完成语法 : CtrlE 复制一行 : CtrlK 恰好复制该位置右边的该行的字符 :…

Crosstool-ng制作交叉编译工具链

Crosstool-ng制作交叉编译工具链 交叉编译器可以用现成的&#xff0c;比如CodeSourcery制作的交叉编译器&#xff0c;也可以自己制作&#xff0c;一般是用kernelgccglibcbinutils的源码包来编译安装&#xff0c;后来由于这个太麻烦于是就有类似crosstool这样的自动化配置工具。…

数学建模之聚类模型详解

聚类模型 引言 “物以类聚&#xff0c;人以群分”&#xff0c;所谓的聚类&#xff0c;就是将样本划分为由类似的对象组成的多个类的过程。聚类后&#xff0c;我们可以更加准确的在每个类中单独使用统计模型进行估计、分析或预测&#xff1b;也可以探究不同类之间的相关性和主…

嵌入式Linux启动过程中的问题积累

嵌入式Linux启动过程中的问题积累 Dongas 07-12-19 1.Bad Magic Number ## Booting image at 33000000 ... Bad Magic Number OMAP5912 OSK # &#xff08;tftp下载好kernel的uImage后就停止在这&#xff0c;不能启动kernel&#xff09; 问题原因&#xff1a;启动参数设置错误,…

使用BusyBox制作嵌入式Linux根文件系统

STEP 1&#xff1a;构建目录结构 创建根文件系统目录&#xff0c;主要包括以下目录/dev /etc /lib /usr /var /proc /tmp /home /root /mnt /bin /sbin /sys #mkdir /home/rootfs#cd /home/rootfs #mkdir dev etc lib usr var proc tmp home root …

Linux串口c_cc[VTIME]和c_cc[VMIN]属性设置的作用

Linux串口c_cc[VTIME]和c_cc[VMIN]属性设置的作用 在串口编程模式下&#xff0c;open未设置O_NONBLOCK或O_NDELAY的情况下。 c_cc[VTIME]和c_cc[VMIN]映像read函数的返回。 VTIME定义等待的时间&#xff0c;单位是百毫秒(通常是一个8位的unsigned char变量&#xff0c;取值不能…

Linux_2.6字符设备驱动实例

第一步&#xff1a;my74hc595.c #include <linux/module.h> //模块所需的大量符号和函数定义#include <linux/init.h> //指定初始化和清除函数#include <linux/fs.h> //文件系统相关的函数和头文件#include <linux/cdev.h> //cdev结构的头文件#include…

移植mysql到嵌入式ARM平台

移植MySQL到嵌入式ARM平台 MySQL没有专门针对ARM的版本&#xff0c;移植到ARM没有官方文档可参考&#xff0c;因此&#xff0c;暂时参考这样一篇文档&#xff1a; http://blog.chinaunix.net/space.php?uid9701860&doblog&id285428&#xff0c;因为MySQL5.5之后&…

'./mysql-bin.index' not found (Errcode: 13) 的解决方法

将文件系统复制到PC机上&#xff0c;然后再拷贝到别的SD卡后&#xff0c;发现mysql无法启动了&#xff0c;首先检查了一下mysql的错误日志&#xff0c;发现最后出现以下错误&#xff1a;/usr/local/mysql/libexec/mysqld: File ./mysql-bin.index not found (Errcode: 13)提示.…

Unity Hub安装Android Build Support报错:Failed to delete old Unity Android Supprtinstallation files

安装失败&#xff1a; 解决方法&#xff1a; 需要先安装 Android Build Support &#xff0c;再安装 Android SDK & NDK Tools 和 OpenJDK 其他情况&#xff1a; 如果已经安装了Android SDK & NDK Tools 和 OpenJDK&#xff0c;只剩Android Build Support 未安装成功…

红米5 Plus刷开发版/小米手机刷开发版

到官网选择对应手机型号下载Rom包&#xff1a;MIUI下载 下载完成后手机打开&#xff1a;设置→我的设备→MIUI版本→右上角选择【手动选择安装包】&#xff0c;找到下载的包等待手机重启就行了。 PS&#xff1a;如果是像下面这样 小米手机找不到手动选择安装包 选项的话&#…

小米手机开启Root权限

1.开启权限前手机先要刷成开发版&#xff0c;可以看 → 小米手机刷开发版 2.设备解锁&#xff0c;先在 设置→我的设备→全部参数→开启开发者模式→多击MIUI版本 开启开发者模式&#xff0c;然后进入 设置→更多设置→开发者选项→设备解锁状态 &#xff0c;根据操作提示解锁…

小米手机Linux Deploy安装Ubuntu

1.Linux Deploy 2.4版本之后无需再安装Busy Box&#xff0c;所以BusyBox安装报错失败的不需要再安装了。直接GooglePlay下载inux Deploy最新版进行安装即可&#xff0c;或 点击此处下载。 2.下载安装Linux Deploy之后进行Ubuntu的安装。 我的配置如下&#xff1a; 引导设置&a…

Linux Deploy Ubuntu安装samba服务

1.更新软件源&#xff1a;sudo apt-get update 2.安装samba服务&#xff1a;sudo apt-get install samba 3.备份原配置文件&#xff1a;sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak 4.创建共享目录&#xff1a;sudo mkdir -p /共享文件夹路径 5.更新目录权限&…

摄像头监控录像保存到手机(旧手机/废弃手机)本文使用手机为红米Note5 Plus

本文为使用旧手机安装linux Ubuntu系统之后安装samba服务&#xff0c;用作NAS网络存储&#xff0c;需要摄像头软件可以将录像保存至NAS。 1.手机需要先开启 Root权限&#xff0c;小米手机可参考&#xff1a;小米手机开启Root权限-CSDN博客 2.小米手机正常开启的Root权限不是完整…

通过Blender将PMX模型转为FBX导入Unity

一、下载Blender&#xff08;建议2.83版本不要太高的&#xff09; 官网下载网址&#xff1a;Blender 2.83 LTS — blender.org 二、之后安装Blender&#xff0c;安装后下载插件 下载地址&#xff1a;https://codeload.github.com/GiveMeAllYourCats/cats-blender-plugin/zip/…

Git理论、原理、操作

Git理论、原理、操作 Git简介&#xff1a; 一个开源的分布式版本控制系统。用于处理任何大大小小的项目&#xff0c;是一个开放源码的版本控制软件。Git与SVG的区别&#xff1a; 1、git是分布式的 2、git把内容按元数据方式存储&#xff0c;svg按文件 3、git分支和svg分支不同…

我在Facebook的十点经验分享[转载]

转载自 http://blog.sina.com.cn/s/blog_70c9335b010144kc.html 我是2007年初加入Facebook, 那时大概150人; 2011年9月底离开, 当时3200多人. 经历了很多稀奇古怪但影响很大的项目, 像Application Platform, Social Ads, News Feed, Gift Shop, Facebook Credits等等. 碰到的很…

Android中让Service被关闭后再重新启动

2019独角兽企业重金招聘Python工程师标准>>> --------------------------------------------------------------------------- 转载&#xff1a;http://blog.csdn.net/arui319 --------------------------------------------------------------------------- 如何做…

CloudStack学习-3

此次试验主要是CloudStack结合openvswitch 背景介绍 之所以引入openswitch&#xff0c;是因为如果按照之前的方式&#xff0c;一个网桥占用一个vlan&#xff0c;假如一个zone有20个vlan&#xff0c;那么岂不是每个vlan都要创建一个桥&#xff0c;维护很麻烦 openvswitch是由Nic…