C 语言 时间函数使用技巧(汇总)
time.h 头文件 是 C 语言中 有关 时间的函数所储存的头文件
#include <time.h>
在介绍时间函数用法之前,我们首先要了解在 time.h 头文件中已经声明了的一个结构: struct tm
该结构在time.h 头文件内声明如下:
#ifndef _TM_DEFINED
#define _TM_DEFINED
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;
};
#endif
该结构内个成员所代表的意思:
struct tm
{
int tm_sec; //秒(0~61)
int tm_min; //分(0~59)
int tm_hour; //小时(0~23)
int tm_mday; //日(1~31)
int tm_mon; //月份(0~11)
int tm_year; //年,从1970年至今经过的年数
int tm_wday; // 星期:(0~6)
int tm_yday; // 天数(0~365)
int tm_isdst; //夏令时 daylight-saving time
}
下面来介绍几种时间函数的用法:
//函数名称:
time();
//函数原型:
time_t __cdecl time(time_t *_Time)
{
return _time64(_Time);
}
//函数功能:得到机器的日历时间或设置日历时间
//函数返回机器日历时间
//用法:
参数说明: timer = NULL 时得到机器日历时间, timer = 时间数值值,用于设置日历时间, time_t 是一个long 类型
#include <stdio.h>
#include <time.h>
int main(void)
{
time_t timer;
timer = time(NULL);
printf("%ld\n", timer);
}
运行结果是 秒数:
将这个秒数通过时间戳在线转换网站转换为年月日,转换网址为: https://tool.lu/timestamp/ 转换结果如下

//函数名称:
localtime();
//函数原型:
struct tm *__cdecl localtime(const time_t *_Time)
{
return _localtime32(_Time);
}
//函数功能: 返回一个以 tm结构表达的机器时间信息
//函数返回:以 tm 结构表达的时间
//用法:
#include <stdio.h>
#include <time.h>
int main(void)
{
time_t timer;
struct tm *tblock;
timer = time(NULL);
tblock = localtime(&timer);
printf("当地时间是 %s", tblock);
}
直接使用 tblock的值 输出结果是有问题的:

想要获取日常使用的时间格式 要多使用一个函数:
//函数名称:
asctime();
//函数原型:
char *__cdecl asctime(const struct tm *_Tm)
//函数功能:获取机器时间(日期时间转换成ASCII码)
//函数返回:返回的时间字符串格式为: 星期,月,日,小时:分:秒,年
//用法:
#include <stdio.h>
#include <time.h>
int main(void)
{
time_t timer;
struct tm *tblock;
timer = time(NULL);
tblock = localtime(&timer);
printf("当地时间是 %s", asctime(tblock));
}
//另一种用法:
//结合 struct tm 结构
#include <stdio.h>
#include <time.h>
#include <string.h>
int main(void)
{
struct tm t;
char str[80];
t.tm_sec = 1;
t.tm_min = 3;
t.tm_hour = 7;
t.tm_mday = 22;
t.tm_mon = 11;
t.tm_year = 56;
t.tm_wday = 4;
t.tm_yday = 0;
t.tm_isdst = 0;
strcpy(str, asctime(&t));
printf("%s", str);
}
运行结果:
用法1:

用法2:

同样使用 时间格式输出时间的还有:
//函数名称:
ctime();
//函数原型:
char *__cdecl ctime(const time_t *_Time)
{
return _ctime64(_Time);
}
//函数功能:得到日历时间
//函数返回:返回字符串格式: 星期,月,日,小时:分:秒,年
//用法:
#include <stdio.h>
#include <time.h>
int main(void)
{
time_t t;
time(&t);
printf("当地时间是 %s", ctime(&t));
}
运行结果:

两次机器时间差的获取方法:
//函数名称:
difftime();
//函数原型:double __cdecl difftime(time_t _Time1,time_t _Time2)
//函数功能:得到两次机器时间差,单位为秒
//函数返回:时间差,单位为秒
//用法:
//参数说明: time1 - 机器时间一, time2 - 机器时间二,该参数应使用 time函数获得
#include <stdio.h>
#include <time.h>
#include <windows.h>
int main(void)
{
time_t first, second;
first = time(NULL);
Sleep(2000);
second = time(NULL);
printf("两者之间差了 %f 秒", difftime(second, first));
}
运行结果:

另一个 结构 时间信息 函数:
//函数名称:
gmtime();
//函数原型:struct tm *__cdecl gmtime(const time_t *_Time) { return _gmtime64(_Time); }
//函数功能:得到以结构 tm 表示的时间信息
//函数返回:以结构 tm 表示的时间信息指针
//用法:
//参数说明: t 函数用 time()得到的时间信息
#include <stdio.h>
#include <time.h>
#include <windows.h>
int main(void)
{
char *tzstr = "TZ = PST8PDT";
time_t t;
struct tm *gmt, *area;
putenv(tzstr);
tzset();
time(&t);
area = localtime(&t);
printf("当地时间是: %s", asctime(area));
gmt = gmtime(&t);
printf("格林尼治时间是: %s", asctime(gmt));
}
运行结果:

上个示例中提到 tzset():
//函数名称:
tzset();
//函数原型:void __cdecl tzset(void) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
//函数功能:对UNIX操作系统的时间兼容性,用于得到时区 在 DOS 环境下无用途
//函数返回:无
//用法:
#include <stdio.h>
#include <time.h>
#include <windows.h>
int main(void)
{
time_t td;
putenv("TZ = PST8PDT");
tzset();
time(&td);
printf("当前时间 = %s", asctime(localtime(&td)));
}
运行结果:

下面来介绍实现 自定义 时间格式输出函数:
//函数名称:
strftime();
/*函数原型:size_t __cdecl strftime(char * __restrict__ _Buf,size_t _SizeInBytes,const char * __restrict__ _Format,const struct tm * __restrict__ _Tm);
它有4个参数:
_Buf, 表示返回的时间字符串
_SizeInBytes, 要写入的字节的最大数量
_Format, 这是 C 字符串,包含了普通字符和特殊格式说明符的任何组合。
_Tm, 输入时间结构体
其中C字符串格式符说明如下:
说明符 替换为 示例
%a 缩写的星期几名称 Sun
%A 完整的星期几名称 Sunday
%b 缩写的月份名称 Mar
%B 完整的月份名称 March
%c 日期和时间表示法 Sun Jan 23 02:56:02 2022
%d 一月中的第几天(01-31) 19
%H 24 小时格式的小时(00-23) 14
%I 12 小时格式的小时(01-12) 05
%j 一年中的第几天(001-366) 231
%m 十进制数表示的月份(01-12) 08
%M 分(00-59) 55
%p AM 或 PM 名称 PM
%S 秒(00-61) 02
%U 一年中的第几周,以第一个星期日作为第一周的第一天(00-53) 33
%w 十进制数表示的星期几,星期日表示为 0(0-6) 4
%W 一年中的第几周,以第一个星期一作为第一周的第一天(00-53) 34
%x 日期表示法 08/19/12
%X 时间表示法 02:50:06
%y 年份,最后两个数字(00-99) 01
%Y 年份 2012
%Z 时区的名称或缩写 CDT
%% 一个 % 符号 %
*/
//函数功能:将时间结构体转换为指定的字符串格式
//函数返回:通过指定的字符串格式打印出来
//用法:
#include <stdio.h>
#include <time.h>
int main(void)
{
time_t now_time;
struct tm *info;
char buffer[80];
time( &now_time );
info = localtime( &now_time );
strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", info);
printf("格式化的日期和时间 : %s \n", buffer );
}
运行结果:

通过打印的结果可以看出,打印字符串的格式和函数中指定的字符串格式是一样的,这样通过对字符串格式的设置,就可按照自己的要求打印出时间和日期的字符串,使用起来更加灵活和方便。
关于 C 语言时间函数的用法和特色后续会在陆续补充
C 语言 时间函数使用技巧(汇总)的更多相关文章
- 嵌入式、C语言位操作的一些技巧汇总
下面分享关于位操作的一些笔记: 一.位操作简单介绍 首先,以下是按位运算符: 在嵌入式编程中,常常需要对一些寄存器进行配置,有的情况下需要改变一个字节中的某一位或者几位,但是又不想改变其它位原有的值, ...
- C语言 时间函数的学习和总结
一直都是以简单的time_t t,time(&t),ctime(&t)来表示时间,后来要以时间为日志文件的名字时,就有点蒙逼了.学习一下. tm结构: struct tm { ...
- C语言 时间函数的学习
一直都是以简单的time_t t,time(&t),ctime(&t)来表示时间,后来要以时间为日志文件的名字时,就有点蒙逼了.学习一下. tm结构: struct tm { int ...
- go语言时间函数
以YY-mm-dd HH:MM:SS.9位 输出当前时间: func main() { fmt.Println(time.Now()) // 2019-11-15 16:26:12.4807588 + ...
- Go语言 时间函数
@ 目录 引言 1. 时间格式化 2. 示例 引言 1946年2月14日,人类历史上公认的第一台现代电子计算机"埃尼阿克"(ENIAC)诞生. 计算机语言时间戳是以1970年1月1 ...
- C语言时间函数
#include "time.h" #include "stdio.h" #include "stdlib.h" int main() { ...
- [转帖]C语言计算时间函数 & 理解linux time命令的输出中“real”“user”“sys”的真正含义
C语言计算时间函数 & 理解linux time命令的输出中“real”“user”“sys”的真正含义 https://blog.csdn.net/willyang519/article/d ...
- C语言 常用的时间函数
//时间函数的使用 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include& ...
- 常用php时间函数用法汇总
1.设置时区的方法: php5后都要自己设置时区,要么修改php.ini的设置,要么在代码里修改. 在PHP.INI中设置时区 date.timezone = PRC 在代码中设置时区 1 date_ ...
随机推荐
- 手动搭建简易web框架与django框架简介
目录 纯手写简易web框架 基于wsgiref模块 动静态网页 简单了解jinja2模块 框架请求流程 python主流web框架 django框架 简介 应用app 命令操作django pycha ...
- 【FineBI】增量数据更新语句
SELECT * FROM t_abike_user WHERE AddUserTime BETWEEN '2016-11-17 10:49:04' AND '2021-07-31 23:59:59'
- drools执行完某个规则后终止别的规则执行
目录 1.背景 2.需求 3.实现方案 1.通过Fact判断 2.通过全局变量判断 3.通过halt方法 4.实现上述需求 4.1 drl 文件编写 4.2 运行结果 5.完整代码 1.背景 在我们开 ...
- TornadoFx设置保存功能((config和preference使用))
原文地址:TornadoFx设置保存功能(config和preference使用) 相信大部分的桌面软件都是存在一个设置的界面,允许用户进行设置的修改,此修改之后需要保存的本地,若是让开发者自己实现, ...
- 20212115朱时鸿实验一《python程序设计》实验报告
------------恢复内容开始------------ #学号20212115 <python程序设计>实验一报告 课程: <python程序设计> 班级:2121 姓名 ...
- 测试平台系列(95) 前置条件支持简单的python脚本
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的教程,希望大家多多支持. 欢迎关注我的公众号米洛的测开日记,获取最新文章教程! 回顾 上一节我们构思了一下怎么去支 ...
- Full卷积、Same卷积、Valid卷积、带深度的一维卷积
转载和参考以下几个链接:https://www.cnblogs.com/itmorn/p/11177439.html; https://blog.csdn.net/jack__linux/articl ...
- REST类型网址调用
by zyi
- NC21874 好串
NC21874 好串 题目 题目描述 牛牛喜欢跟字符串玩耍,他刚刚学会了一个新操作,将一个字符串x插入另一个字符串y中(包括放在开头和结尾) 牛牛认为如果一个串是好的当这个串能按照如下方法被构造出来: ...
- SpringBoot启动代码和自动装配源码分析
随着互联网的快速发展,各种组件层出不穷,需要框架集成的组件越来越多.每一种组件与Spring容器整合需要实现相关代码.SpringMVC框架配置由于太过于繁琐和依赖XML文件:为了方便快速集成第三 ...