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_ ...
随机推荐
- 个人冲刺(三)——体温上报app(二阶段)
冲刺任务:完成用户类.温度数据和第二页面类的编写 User.java package com.example.helloworld; class User { private String usern ...
- 手动搭建简易web框架与django框架简介
目录 纯手写简易web框架 基于wsgiref模块 动静态网页 简单了解jinja2模块 框架请求流程 python主流web框架 django框架 简介 应用app 命令操作django pycha ...
- vue项目|在弹窗中引入uchart图表子组件不显示
为了解决uchart作为子组件在主组件里引用但不显示的情况,(同样适用于弹窗之中)目前有三种方法. 1-解决方式 1>如果你使用的uchart子组件是从官方拿的例子:进入到uchart子组件将o ...
- Python模块Ⅰ
Python模块Ⅰ part1 模块的定义/取别名 自定义模块 什么是模块:模块的本质就是.py文件,封装语句的最小单位 模块中出现的变量,for循环,if结构,函数定义...称为模块成员 模块的运行 ...
- 2.26NK周赛
这场打的很烂,说明我对组合数学的掌握(二项式定理,以及递推式的思考方向)都不太好.而且,我做题的思路也很有问题.就是完全凭借灵感,自己没有脑子一样思路就被题目带跑了,根本跳不出来,看到题目也不会分析, ...
- nazo.io 通关记录
游戏网址 说在前面 答案错误页面 nazo.io/wrong 攻略 第0关 谜.io 纯粹是欢迎你来游戏. 所以他给你的start就是答案. 第1关 欢迎 它用灰体字写了key: welcome 直接 ...
- Mesokurtic,Leptokurtic, Platykurtic介绍
[原文地址1] [原文地址2] 简要介绍 这三个东西其实是把峰度(Kurtosis)分成了三种类别,峰度也就是评测一个分布的尾部与正态分布的尾部有多不同的定量测量值(如下图所示). 对于一个正态分布的 ...
- datax在解析完配置后,会将core.json,job.json,plugin.json合并内容
{ "common": { "column": { "dateFormat": "yyyy-MM-dd", " ...
- 将Hexo搭建到自己的服务器上
http://xybin.top/posts/9373.html 第一部分:服务器端的操作 1.安装git 和nginx yum install -y nginx git 2.添加一个git用户 #添 ...
- sharepoint 配置失败,已引发类型为System.ArgumentException的异常。其他异常信息:domainName参数不支持指定的值。
解决方法:在域控制器中加入sharepoint计算机,设置为administrators组中