首页后端开发其他后端知识用C语言显示系统时间的方法有哪些,代码怎么写

用C语言显示系统时间的方法有哪些,代码怎么写

时间2024-03-28 09:56:03发布访客分类其他后端知识浏览1437
导读:在实际案例的操作过程中,我们可能会遇到“用C语言显示系统时间的方法有哪些,代码怎么写”这样的问题,那么我们该如何处理和解决这样的情况呢?这篇小编就给大家总结了一些方法,具有一定的借鉴价值,希望对大家有所帮助,接下来就让小编带领大家一起了解看...
在实际案例的操作过程中,我们可能会遇到“用C语言显示系统时间的方法有哪些,代码怎么写”这样的问题,那么我们该如何处理和解决这样的情况呢?这篇小编就给大家总结了一些方法,具有一定的借鉴价值,希望对大家有所帮助,接下来就让小编带领大家一起了解看看吧。


     
目录
  • 分析
  • 代码实现
    • 1.简易版
    • 2.自定义格式版
    • 3.格式化输出版
    • 4.精细版(毫秒+微秒)
  • 网上参考
    • 总结

      分析

      C语言的时间库函数基本都在time.h里,该头文件主要包含三种形式的时间量,一种是time_t类型(原型为long),表示当前时间到1970年1月1日的总秒数;一种是struct tm类型,里面是时间日期的数据;还有一种clock_t,这个类型本文用不到,它表示与处理器时钟有关的时间数据。

      本文将介绍4种显示系统时间的方法:

      • 第一种直接用ctime函数将time_t类型的秒数据转换成字符串;
      • 第二种先通过time_t类型变量获取秒数据,然后再用localtime()函数将秒数据转换成struct tm类型数据,最后将struct tm类型变量的结构体成员分别打印,同时打印格式可以自己随意控制。
      • 第三种在第二种的基础上,使用strftime()函数,格式化打印时间数据,这些格式有专门的规范,具体参数可以自行百度。
      • 第四种在第三种的基础上,增加了毫秒和微秒显示,不过需要新增一个数据类型strcut timeval和gettimeofday()函数,该函数和time()作用类似,都是获取秒数,但后者是将获取的秒数传给time_t类型变量。

      代码实现

      1.简易版

      time_t time(time_t *timer):time()是指返回自 Unix 纪元(January 1 1970 00:00:00 GMT)起的当前时间的秒数的函数,主要用来获取当前的系统时间,返回的结果是一个time_t类型。
      char *ctime(const time_t *timer):把日期和时间转换为字符串,函数形参为time_t类型。
      ——百度百科

      ctime()这个函数会根据本地时区进行转换,字符串格式为"Wed Jun 30 21 :49 :08 1993\n"

      #include stdio.h>
          
      #include time.h>
      
      
      
      int main ()
      {
          
          time_t tt;
          
          time(&
          tt);
               //获取秒数
          printf ( "当前本地时间为: %s", ctime(&
          tt));
          
          return 0;
      
      }
      
      

      运行结果:

      2.自定义格式版

      struct tm结构体成员:

      struct tm {
          
        int tm_sec;
                   /* 秒,范围从 0 到 59        */
        int tm_min;
                   /* 分,范围从 0 到 59        */
        int tm_hour;
                  /* 小时,范围从 0 到 23        */
        int tm_mday;
                  /* 一月中的第几天,范围从 1 到 31    */
        int tm_mon;
                   /* 月,范围从 0 到 11        */
        int tm_year;
                  /* 自 1900 年起的年数        */
        int tm_wday;
                  /* 一周中的第几天,范围从 0 到 6    */
        int tm_yday;
                  /* 一年中的第几天,范围从 0 到 365    */
        int tm_isdst;
             /* 夏令时                */
      }
          ;
          
      

      struct tm *gmtime(const time_t *timer):将time_t类型变量转换为struct tm类型变量,同时使用协调世界时(UTC),也称为格林尼治标准时间(GMT)【应该不常用】
      struct tm *localtime(const time_t *timer):和gmtime功能类似,将time_t类型变量转换为struct tm类型变量,但时间由本地时区决定。
      char *asctime(const struct tm *timeptr):把日期和时间转换为字符串,函数形参为struct tm类型。
      ——百度百科

      【注意】tm_year是从1900年算起,所以打印它时需要加上1900;tm_mon从0开始算,所以打印它时需要加1。

      #include time.h>
          
      #include stdio.h>
          
      #include conio.h>
                          //kbhit()/_kbhit()
      #include Windows.h>
                    //Sleep(ms)
      
      int main(void)
      {
          
          time_t tt_;
          
          struct tm *tm_ ;
      
          while(!kbhit())               //按下键盘任意键退出循环(包括鼠标点击)
          {
          
              time(&
          tt_);
                         //获取秒数
              tm_ = localtime(&
          tt_);
              //将秒数转换为本地时间(北京时间)
            //tm_ = gmtime(&
          tt_);
                 //将秒数转换为UTC时区时间(不建议使用)
      
              /* 自己定义打印样式;
           %02d:宽度为两个整型,如果不够,左边补零;
           \r:回车不换行 */
              printf("当前时间:%d年%d月%d日 %02d:%02d:%02d\r", 1900 + tm_->
          tm_year,\
                     tm_->
          tm_mon + 1, tm_->
          tm_mday, tm_->
          tm_hour, tm_->
          tm_min, tm_->
          tm_sec);
          
      
              /* 使用asctime函数打印tm变量表示的时间( 自带回车换行) */
              //printf("当前本地时间为: %s", asctime(tm_));
          
      
              Sleep(500);
                     //0.5s延时
          }
          
      
          return 0;
      
      }
          
      

      运行结果:

      动态打印本地时间(自定义格式):

      动态打印UTC时间(自定义格式),时间比本地时间早8小时:

      使用asctime函数动态打印本地时间,打印间隔0.5s:

      3.格式化输出版

      size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr):根据format指定的格式(格式必须符合要求),将时间数据存入字符串str中,想了解具体的格式,可以自行百度,这里简单介绍下面程序使用到的格式参数:
      %Y:年份(真实年份,不需加1900)
      %m:月份(01-12)
      %d:一月中的第几天(01-31)
      %H:小时(00-23)
      %M:分(00-59)
      %S:秒(00-59)
      ——百度百科

      #include time.h>
          
      #include stdio.h>
          
      #include conio.h>
                          //kbhit()/_kbhit()
      #include Windows.h>
                    //Sleep(ms)
      
      int main(void)
      {
          
          time_t tt_;
          
          struct tm *tm_ ;
          
          char output[20];
      
          while(!kbhit())               //按下键盘任意键退出循环(包括鼠标点击)
          {
          
              time(&
          tt_);
                         //获取秒数
              tm_ = localtime(&
          tt_);
              //将秒数转换为本地时间(北京时间)
      
              /* 格式化打印 */
              strftime(output, 20, "%Y-%m-%d %H:%M:%S", tm_);
          
              printf("当前时间:%s\r", output);
           //回车不换行
              Sleep(500);
                     //0.5s延时
          }
          
          return 0;
      
      }
      
      

      运行结果:

      4.精细版(毫秒+微秒)

      struct timeval结构体成员:

      struct timeval{
          
         long tv_sec;
            //秒
         long tv_usec;
        //微秒
      }
          ;
      
      

      int gettimeofday (struct timeval * tv, struct timezone * tz):获得当前精确时间(1970年1月1日到现在的时间),其参数tv是保存获取时间结果的结构体,参数tz用于保存时区结果,函数执行成功后返回0,失败后返回-1
      ——百度百科

      gettimeofday()和前面提到的time()函数功能类似,都是获取时间,但它们形参和返回值差别还是很大的。

      int main(void)
      {
          
          time_t tt_;
          
          struct tm *tm_ ;
          
          struct timeval tv_;
          
          long tv_ms = 0, tv_us = 0;
          
          char output[20];
      
          while(!kbhit())                //按下键盘任意键退出循环(包括鼠标点击)
          {
          
              time(&
          tt_);
                          //获取秒数保存到time_t变量
              tm_ = localtime(&
          tt_);
               //将秒数转换为本地时间(北京时间)
              gettimeofday(&
          tv_,NULL);
             //获取1970-1-1到现在的时间保存到timeval变量
      
              /* 格式化打印 */
              strftime(output, 20, "%Y-%m-%d %H:%M:%S", tm_);
          
              tv_ms = tv_.tv_usec / 1000;
          //获取毫秒
              tv_us = tv_.tv_usec % 1000;
          //获取微秒
              printf("当前时间:%s %ld:%ld\r", output,\
                     tv_ms / 10, tv_us / 10);
             //改成100进1
              Sleep(1);
                        //ms延时
          }
          
          return 0;
      
      }
          
      
      

      运行结果:

      网上参考

      网上找到一篇能够显示毫秒的时间打印代码,不过只适用于Windows平台:

      原文链接:用C语言动态打印当前时间(精确到毫秒)

      #include stdio.h>
           
      #include windows.h>
       
      
      int main( void ) 
      {
           
      	SYSTEMTIME sys;
       
      	while(1){
          
      		printf("当前时刻为:\n");
           	 
      		//获取系统时间 
      		GetLocalTime( &
          sys );
           
      		//按照年/月/日 时/分/秒.毫秒 星期几格式打印 
      		printf( "%4d/%02d/%02d %02d:%02d:%02d.%03d 星期%1d\n",
      		sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute, 
      		sys.wSecond,sys.wMilliseconds,sys.wDayOfWeek);
           
      		Sleep(1);
          
      		//清屏命令 
      		system("cls");
      
      	}
          
      	return 0;
      
      }
          
      

      运行效果:

      他使用清屏来实现单行打印,这样容易造成频闪现象,其实只要将\n换成成\r就行了。

      总结


      以上就是关于“用C语言显示系统时间的方法有哪些,代码怎么写”的介绍了,感谢各位的阅读,希望文本对大家有所帮助。如果想要了解更多知识,欢迎关注网络,小编每天都会为大家更新不同的知识。

      声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


      若转载请注明出处: 用C语言显示系统时间的方法有哪些,代码怎么写
      本文地址: https://pptw.com/jishu/654863.html
      Bootstrap列表组能做什么,列表组组件如何使用 Bootstrap中元素左浮动的实现方法是什么

      游客 回复需填写必要信息