Unix时间戳

时间戳,相信很多相关专业的人,计算机软件电子等等都会听过。由于最早是由Unix系统使用所以又叫Unix时间戳。

Unix 时间戳(Unix Timestamp)定义为从UTC(世界协调时)/GMT(格林尼治时)的1970年1月1日0时0分0秒开始所经过的秒数不考虑闰秒,我们不需要考虑进位,只需要记录秒数

所以时间戳只需要比较大的一个计数器即可记录时间。

UTC/GMT介绍

GMT(Greenwich Mean Time)格林尼治标准时间是一种以地球自转为基础的时间计量系统。它将地球自转一周的时间间隔等分为24小时,以此确定计时标准。(伦敦标准时间)

注意:由于引力潮汐种各样的因素其实地球自转时间是不断变慢,导致时间基础不准确;

UTC(Universal Time Coordinated)协调世界时是一种以原子钟为基础的时间计量系统。它规定铯133原子基态的两个超精细能级间在零磁场下跃迁辐射9,192,631,770周所持续的时间为1秒。当原子钟计时一天的时间与地球自转一周的时间相差超过0.9秒时,UTC会执行闰秒来保证其计时与地球自转的协调一致。

注意:闰秒机制:由于地球受到潮汐,引力变化等等因素影响自转一周时间是不固定的,假设:时间会偏慢开始可能差1或者0.9秒才有24h,此时我们可以把UTC设置为2进1,来等待GMT时间减小误差,使得两个同步。

时间戳存储在一个秒计数器中,秒计数器为32位/64位的整型变量 世界上所有时区的秒计数器相同,不同时区通过添加偏移来得到当地时间。

优点:1简化硬件电路,.只需要一个比较大的寄存器存储秒数即可;

           2.计算差值方便,只需要计算两个时间戳之间的差值,不需要考虑单位转化;

 缺点:占用软件资源,时间戳往往比较大运算较为费时间;

时间戳的起点也就是:伦敦时间1970-1-1 0:0:0为起点开始计数秒数;

所以为我们之需要将时间戳进行转化,就可以很简单的计算出当前的时间;

那么具体的计算,就可以参考''time.h''里面如何计算。

对于我们使用时间戳而言主要:利用时间戳来实现时间的转换,具体的转换过程C语言当中已经完善在<time.h>当中我们只需要调用函数转换时间戳即可。

接下来主要是对于time.h的介绍,我截图来自菜鸟编程,自己感兴趣也可以去看看详细介绍

首先time当中封装好了变量:

以及分装好的库函数:

主要是针对于各种时间戳的函数,方便我们处理我这里演示几个常用的:

1.time_t time(time_t *seconds)可以用来获取当前时间戳,我们可以通过传递整数地址,也可以通过直接,接收返回值获取当前时间戳。

注意:该函数只适用于在线系统,我们可以获取电脑当中的时间戳,而对于离线系统例如后面STM32离线系统,它本身的计数器为空需要我们传递值,所以无法从中获取时间戳。

示例:

#include <stdio.h>
#include "time.h"
int main()
{
	time_t test_time = 0;//此处采用time.h当中定义的32位无符号整形,也可以自定义
	test_time = time(NULL);
	printf("时间戳test_time:%d\n", test_time);
	time_t test_time2 = 0;
	time(&test_time2);
	printf("时间戳test_time2:%d\n", test_time);
	return 0;
}

效果:

2.struct tm *gmtime(const time_t *timer):用于获取在GMT/UTC条件下我们对于时间戳的处理,返回的是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;       /* 夏令时                        */    
};

我们通过传递时间戳的地址,就可以返回tm结构体数据。

实例代码:

#include <stdio.h>
#include "time.h"

time_t time_cnt;
struct tm time_data;
int main()
{
	/*time_cnt=time(NULL);*/
	/*time(&time_cnt);*/
	time_cnt =1705582640;
	time_data= *gmtime(&time_cnt);
	printf("伦敦日期:%d-%d-%d\n",time_data.tm_year+1900, time_data.tm_mon + 1, time_data.tm_mday);
	printf("伦敦时间:%d:%d:%d\n", time_data.tm_hour, time_data.tm_min, time_data.tm_sec);
  return 0;
}

实际运行效果:

注意:我们需要注意这里面的年份,月份,小时,和时间戳定义的1970年1月1日0时0秒定义是不一样的,实际使用需要自己添加偏移。

其次获取到的是伦敦时间和日期,需要注意。

3.struct tm* localtime(const time_t*);就是在上面基础上增加了时区的偏移,不需要我们自己手动增加偏移,注意:是根据在线系统自己定位当前时区自己添加偏移,对于离线系统单片机而言实际效果和struct tm *gmtime(const time_t *timer)相同;

#include <stdio.h>
#include "time.h"

time_t time_cnt;
struct tm time_data;
int main()
{
	/*time_cnt=time(NULL);*/
	/*time(&time_cnt);*/
	time_cnt =1705582640;
	time_data= *localtime(&time_cnt);
	printf("北京日期:%d-%d-%d\n",time_data.tm_year+1900, time_data.tm_mon + 1, time_data.tm_mday);
	printf("北京时间:%d:%d:%d\n", time_data.tm_hour, time_data.tm_min, time_data.tm_sec);
  return 0;
}

运行效果:

4.time_t mktime(struct tm *timeptr),就是把tm结构体转化为时间戳秒数的函数。

我们可以通过传递时间日期结构体,来获取时间戳,一般我们用于RTC当中,定义日期的数组

然后获取时间戳,传递给单片机。用户更改时间,只需要照着更改日期时间结构体即可简单易懂。

示例代码:

#include <stdio.h>
#include "time.h"
struct tm time_data;
time_t time_cnt;
int main()
{
   time_data.tm_year = 2024 - 1900;
   time_data.tm_mon = 1 - 1;
   time_data.tm_mday = 4;
   time_data.tm_hour = 0;
   time_data.tm_min = 0;
   time_data.tm_sec = 1;
   time_data.tm_isdst = -1;
   time_cnt = mktime(&time_data);
   printf("时间戳:%d\n", time_cnt);
	return 0;
}

运行结果:

5.char* ctime(const time_t*);主要是把时间戳转化为字符串,方便打印函数直接打印。

6.char *asctime(const struct tm *timeptr) C 库函数 char *asctime(const struct tm *timeptr) 返回一个指向字符串的指针,它代表了结构 struct timeptr 的日期和时间。传回来的是一个日期时间的字符串指针。

实例代码:

#include <stdio.h>
#include <string.h>
#include <time.h>
int main()
{
	struct tm t;

	t.tm_sec = 50;
	t.tm_min = 02;
	t.tm_hour = 22;
	t.tm_mday = 18;
	t.tm_mon = 1-1;
	t.tm_year = 2024-1900;
	t.tm_wday = 4;

	puts(asctime(&t));

	return(0);
}

运行结果:

过多的函数不做讲解,具体可以参考time.h,可以通过定义或者看菜鸟教程C学习。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

iPhone解锁工具---AnyMP4 iPhone Unlocker 中文

AnyMP4 iPhone Unlocker是一款功能强大的iPhone解锁软件&#xff0c;旨在帮助用户轻松解锁iPhone&#xff0c;从而在电脑上进行数据备份、传输和编辑。该软件支持多种iPhone型号&#xff0c;包括最新的iPhone 14系列&#xff0c;并支持多种解锁模式&#xff0c;如屏幕密码解锁、…

【Docker】安装 Nacos容器并根据Nginx实现负载均衡

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《Docker实战》。&#x1f3af;&#x1f3af; &…

Go后端开发 -- 反射reflect 结构体标签

Go后端开发 – 反射reflect && 结构体标签 文章目录 Go后端开发 -- 反射reflect && 结构体标签一、反射reflect1.编程语言中反射的概念2.interface 和反射3.变量内置的pair结构4.reflect的基本功能TypeOf和ValueOf5.从relfect.Value中获取接口interface的信息6…

2018年认证杯SPSSPRO杯数学建模D题(第二阶段)投篮的最佳出手点全过程文档及程序

2018年认证杯SPSSPRO杯数学建模 D题 投篮的最佳出手点 原题再现&#xff1a; 影响投篮命中率的因素不仅仅有出手角度、球感、出手速度&#xff0c;还有出手点的选择。规范的投篮动作包含两膝微屈、重心落在两脚掌上、下肢蹬地发力、身体随之向前上方伸展、同时抬肘向投篮方向…

SpringBoot:前端提交数据,服务端无法获取数据

http://www.xxx.com?phone111111111111&code1332 上述访问传值方式为键值对方式&#xff0c;服务端springmvc获取 >> // 在HttpServlet实现类的doGet、doPost方法中获取前端传来的值 doGet(ServerHttpRequest request){String phone request.getParameter("…

Codeforces Round 767 (Div. 1) D2. Game on Sum (Hard Version)(博弈 期望 dp 贡献)

题目 t(t<1e5)组样例&#xff0c;每次给定n,m,k(m<n<1e6&#xff0c;0<k<1e97) 有一个游戏&#xff0c;持续n轮&#xff0c;每轮Alice先选一个[0,k]的实数&#xff0c; Bob决定从总分里加上这个值还是减去这个值 特别地&#xff0c;n轮里&#xff0c;Bob选择…

Unity Mirror VR联机开发 实战篇(二)

一、迁移示例中的联机物体 1、将MirrorExamplesVR工程中的部分文件夹复制到自己的工程中。 1、打开MirrorExamplesVR中的 SceneVR-Common场景。 2、将场景中没用的东西都删掉&#xff0c;只留下面这些&#xff0c;新建一个空物体XR Mirror&#xff0c;将所有剩下的物体拖成XR …

Elastic 8.12:AI Assistant for Observability 正式发布,更新至 Apache Lucene 9.9

作者&#xff1a;来自 Elastic Brian Bergholm 今天&#xff0c;我们很高兴地宣布 Elastic 8.12 全面上市。 有哪些新的功能&#xff1f; 8.12 版本的两个最重要的组成部分包括 Elastic AI Assistant for Observability 的 正式发布版 和 Apache Lucene 9.9 的更新&#xff08…

网络安全B模块(笔记详解)- SQL注入

简单sql注入 1.使用渗透机场景kali中工具扫描服务器场景,将apache的端口号和版本号作为Flag提交(格式:端口号_版本号) Flag:8081_7.5 2.使用渗透机场景windows7访问服务器场景SQL网站,并将网站中概述页面中的Flag提交; Flag:sql_is_good 3.使用渗透机场景windows7访问…

AR与AI融合加速,医疗护理更便捷

根据Reports and Data的AR市场发展报告&#xff0c;到2026年&#xff0c;预计医疗保健市场中的AR/VR行业规模将达到70.5亿美元。这一趋势主要受到对创新诊断技术、神经系统疾病和疾病意识不断增长的需求驱动。信息技术领域的进步&#xff0c;包括笔记本电脑、计算机、互联网连接…

有效防范网络风险的关键措施

在数字化时代&#xff0c;企业面临着日益复杂和频繁的网络风险。提高员工的网络安全意识是防范网络威胁的关键一步。本文将探讨企业在提升网络安全意识方面可以采取的措施&#xff0c;以有效预防潜在的网络风险。 1. 开展网络安全培训&#xff1a;企业应定期组织网络安全培训&…

WordPress后台底部版权信息“感谢使用 WordPress 进行创作”和版本号怎么修改或删除?

不知道各位WordPress站长在后台操作时&#xff0c;是否有注意到每一个页面底部左侧都有一个“感谢使用 WordPress 进行创作。”&#xff0c;其中WordPress还是带有nofollow标签的链接&#xff1b;而页面底部右侧都有一个WordPress版本号&#xff0c;如下图中的“6.4.2 版本”。…

2023年的年度总结PPT不一样了?

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 到了年终&#xff0c;需要撰写年度总结和制定计划了吗&#xff1f; 找不到合适的 PPT 模板&#xff1f; 感到缺乏灵感&#xff1f; 为做 PPT 绞尽脑汁&#xff1f; 为何不试试 AI 写 PPT 呢&#xff1f…

Windows下安装alipay-sdk-python时,pycrypto安装报错问题处理

1、安装alipay-sdk-python 时&#xff0c;保存内容如下。 Building wheels for collected packages: pycryptoBuilding wheel for pycrypto (setup.py) ... error error: subprocess-exited-with-error python setup.py bdist_wheel did not run successfully.│ exit c…

JVM 四种引用和使用场景

一、前言 在JDK 1.2之后&#xff0c;Java对引用的概念进行了扩充&#xff0c;将引用分为强引用&#xff08;Strong Reference&#xff09;、软引用&#xff08;Soft Reference&#xff09;、弱引用&#xff08;Weak Reference&#xff09;、虚引用&#xff08;Phantom Referen…

C语言总结十一:自定义类型:结构体、枚举、联合(共用体)

本篇博客详细介绍C语言最后的三种自定义类型&#xff0c;它们分别有着各自的特点和应用场景&#xff0c;重点在于理解这三种自定义类型的声明方式和使用&#xff0c;以及各自的特点&#xff0c;最后重点掌握该章节常考的考点&#xff0c;如&#xff1a;结构体内存对齐问题&…

【springboot】配置文件入门

配置文件入门 配置文件最重要的目的&#xff1a;解决硬编码问题(代码写死) 我们接下来主要介绍两个方面&#xff1a;常见的配置项和配置文件的使用 SpringBoot 的配置文件,有三种格式 propertiesyamlyml(yaml的简写) 用的较多的是yml和properties文件 如果项目中,同时存在…

pytest + allure(windows)安装

背景 软硬件环境&#xff1a; windows11&#xff0c;已安装anaconda&#xff0c;python&#xff0c;pycharm用途&#xff1a;使用pytest allure 生成报告allure 依赖java&#xff0c;点击查看java安装教程 allure 下载与安装 从 allure下载网址下载最新版本.zip文件 放在自…

[SS]语义分割_转置卷积

转置卷积&#xff08;Transposed Convolution&#xff09; 抽丝剥茧&#xff0c;带你理解转置卷积&#xff08;反卷积&#xff09; 目录 一、概念 1、定义 2、运算步骤 二、常见参数 一、概念 1、定义 转置卷积&#xff08;Transposed Convolution&#xff09;&#xf…

Flink编程——风险欺诈检测

Flink 风险欺诈检测 文章目录 Flink 风险欺诈检测背景准备条件FraudDetectionJob.javaFraudDetector.java 代码分析执行环境创建数据源对事件分区 & 欺诈检测输出结果运行作业欺诈检测器 欺诈检测器 v1&#xff1a;状态欺诈检测器 v2&#xff1a;状态 时间完整的程序期望的…