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就行了。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • c语言中用字符串数组显示菜单的解决方法

    以前写菜单方面东西时往往重复, 发现这个方法还可以, 用一个指针的指针解决遍历问题.代码如下所示: 复制代码 代码如下: #include <stdio.h>static char *menu[] = {  "1 --- push one item./n",  "2 --- pop one item./n",  "3 --- quit./n",  NULL};void Show_menu();int main(){ Show_menu

  • C语言实现二值图像模拟灰值图像显示效果

    本文实例为大家分享了C语言实现二值图像模拟灰值图像显示效果的具体代码,供大家参考,具体内容如下 图案法 图案法(patterning)是指灰度可以用一定比例的黑白点组成的区域表示,从而达到整体图象的灰度感.黑白点的位置选择称为图案化. 下面介绍的一种设计标准图案的算法,是由Limb在1969年提出的. 先以一个2×2的矩阵开始: 通过递归关系有: 其中Mn和Un均为2n×2n的方阵,Un的所有元素都是1. 根据这个算法M2如下,为16级灰度的标准图案: M3(8×8阵)比较特殊,称为Bayer抖

  • 使用C语言中的time函数获取系统时间

    可以通过time()函数来获得计算机系统当前的日历时间(Calendar Time),处理日期时间的函数都是以本函数的返回值为基础进行运算.其原型为:time_t time(time_t * t);如果你已经声明了参数t,你可以从参数t返回现在的日历时间,同时也可以通过返回值返回现在的日历时间,即从一个时间点(例如:1970年1月1日0时0分0秒)到现在此时的秒数.如果参数为空(NULL),函数将只通过返回值返回现在的日历时间,比如下面这个例子用来显示当前的日历时间: 复制代码 代码如下: #i

  • C语言 strftime 格式化显示日期时间的实现

    C/C++程序中需要程序显示当前时间,可以使用标准函数strftime. 函数原型:size_t strftime (char* ptr, size_t maxsize, const char* format,const struct tm* timeptr ); 代码示例: #include <stdio.h> #include <time.h> int main () { time_t rawtime; struct tm * timeinfo; char buffer [12

  • c语言实现系统时间校正工具代码分享

    复制代码 代码如下: //*******************************************************************//Time Protocol是一种非常简单的应用层协议.它返回一个未格式化的32位二进制数字, //这个数字描述了从1900年1月1日午夜到现在的秒数.服务器在端口37监听协议请求,以 //TCP/IP或者UDP/IP格式返回响应.将服务器的返回值转化为本地时间是客户端程序的责任. //这里使用的时间服务器是129.132.2.21,更

  • C语言每日练习之动态显示系统时间

    目录 分析 代码实现 1.简易版 2.自定义格式版 3.格式化输出版 4.精细版(毫秒+微秒) 网上参考 总结 分析 C语言的时间库函数基本都在time.h里,该头文件主要包含三种形式的时间量,一种是time_t类型(原型为long),表示当前时间到1970年1月1日的总秒数:一种是struct tm类型,里面是时间日期的数据:还有一种clock_t,这个类型本文用不到,它表示与处理器时钟有关的时间数据. 本文将介绍4种显示系统时间的方法: 第一种直接用ctime函数将time_t类型的秒数据转

  • 利用线程实现动态显示系统时间

    编写Applet小程序,通过在HTML文档中接收参数, 用不同颜色.字体显示当前的系统时间. import java.awt.*; import java.applet.Applet; import java.util.*; import java.awt.Graphics; public class clock extends Applet implements Runnable //继承Applet类并实现Runnable接口 { Thread clockThread=null; //创建一

  • 基于javascript实现动态显示当前系统时间

    本文实例讲解了javascript实现动态显示当前系统时间的详细代码,具体内容如下 (1)时间日期信息,应该在一个<div>中来显示 (2)定时器:每隔一秒再次访问系统时间,window对象的setTimeout() (3)时钟显示的时机(事件):当网页加载完成后才显示,事件onload (4)如何将 时间日期信息 写入到指定的<div>中,DOM对象中的innerHTML属性 效果图: 具体代码: <html> <head> <meta http-e

  • Android动态显示当前年月日时分秒系统时间(示例代码)

    在布局文件中放一个TextView用来显示时间,如下所示: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="

  • C#实现在控制台输出当前系统时间的方法

    本文实例讲述了C#实现在控制台输出当前系统时间的方法.分享给大家供大家参考.具体实现方法如下: //C#实现的小控制台程序: 动态输出当前时间 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { /// <summary>

  • C语言简单实现门禁系统

    问题提出 用C语言实现门禁系统功能. 功能简析 1.系统登录分为管理员登录和学生登录,输入相应字符即可选择登录: 2.学生登录,学生使用自己的账号密码登录系统,选择开启的门,即可开启门禁:此外系统还会记录下学生登录的信息,如登录账号.登录时间.开启哪间门: 3.管理员登录,管理员登录也是要输入特定的账号密码才能登录:登录之后才能进入管理员操作界面进行相应操作,如添加学生账号.删除学生账号.查看学生基本信息.查看学生登录情况--输入相应字符即可选择执行相应的功能. 4.管理员权限一:添加学生账号.

  • C语言实现航班订票系统

    本文实例为大家分享了C语言实现航班订票系统的具体代码,供大家参考,具体内容如下 描述: 点定义两个链表,一个存储航班信息,一个存储客户信息: 进行一系列简单的增删查找: 代码如下 #include<cstdio> #include<cstring> #include<iostream> #include<cstdlib> using namespace std; const int MAXN=250; typedef struct { string p_id

  • C++如何获取当前系统时间及格式化输出

    本文主要使用time() 及strftime() 函数实现c++获取系统时间. C++系统和时间相关的函数基本上都是使用C语言提供的标准接口 在程序中获取系统时间是常见的操作,很多情况下使用系统提供的time函数即可获取. time() 是系统C语言的标准接口,通过man time 或者man 2 time 可查看详细的使用方法. include <time.h> include <stdio.h> int main() { time_t tt = time(NULL); tm*

  • C语言实现航空订票系统课程设计

    本文实例为大家分享了C语言实现航空订票系统的具体代码,供大家参考,具体内容如下 大一写的时候没有写注释,后来也懒得加了.在这里说一下读写文件的思路吧. 就是利用二进制将一整个结构体中的数据存入文件,然后读取文件时再用二进制的形式将结构体中的数据读取出来,边读取边创建链表,将结构体中的数据保存到链表中. 以下代码可直接复制粘贴就能运行,绝对是新手的好福利! 如果有第一次写这种大作业不知道如何下手,但又不想直接复制粘贴,想搞清楚这个代码的原理的可以私信我,毕竟我当时也第一次写这种大作业时也很苦恼(我

随机推荐