sscanf和snprintf格式化时间字符串的日期与时间戳相互转换用法

news2024/12/28 20:58:02

sscanf格式化时间字符串的用法

UTC:Coordinated Universal Time 协调世界时。因为地球自转越来越慢,每年都会比前一年多出零点几秒,每隔几年协调世界时组织都会给世界时+1秒,让基于原子钟的世界时和基于天文学(人类感知)的格林尼治标准时间相差不至于太大。并将得到的时间称为UTC,这是现在使用的世界标准时间。

协调世界时,又称世界统一时间、世界标准时间、国际协调时间。由于英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称UTC。

(1)时间字符串尾部加Z 表示UTC。+0800表示加上8时区, 也即本地时间。

(2)为了操作方便,时间字符串的格式应该写为: 2020/02/22 10:00:00 这样的格式。

(3)年月日中间用横杠连接且没有指定时分秒则默认表示UTC时间. 可以指定UTC+0800表示时间字符串格式。 (4)时分秒后面加Z表示UTC时间, 不指定Z则表示本地时间。为了防止出错, 建议年月日中间用斜杠‘/’连接。

使用sscanf函数常常会报错,这个时候我们只要在开头加上,#define _CRT_SECURE_NO_WARNINGS
即可取消警告。

sscanf的作用:从一个字符串中读进于指定格式相符的数据。利用它可以从字符串中取出整数、浮点数和字符串。

sscanf和scanf的区别:scanf是以键盘作为输入源,sscanf是以字符串作为输入源。

简单来说就是从 s 处读取c语言字符串类型的数据源,再根据format对应的格式存储到附加参数所给出的位置当中去,效果是类似于scanf()的,但是这个的读入是直接以这个字符串作为输入源。如果成功,则回返回成功填充的参数个数。

在这里插入图片描述

sscanf:

原型:

int sscanf(const char *str, const char *format,......);

说明:

sscanf()会将参数str的字符串根据参数format字符串来转换格式并格式化数据。转换后的结果存于对应的参数内。 成功则返回参数数目,失败则返回0

日期时间与时间戳的相互转换

struct tm
{
    int tm_sec;   // seconds after the minute - [0, 60] including leap second
    int tm_min;   // minutes after the hour - [0, 59]
    int tm_hour;  // hours since midnight - [0, 23]
    int tm_mday;  // day of the month - [1, 31]
    int tm_mon;   // months since January - [0, 11]
    int tm_year;  // years since 1900
    int tm_wday;  // days since Sunday - [0, 6]
    int tm_yday;  // days since January 1 - [0, 365]
    int tm_isdst; // daylight savings time flag
};

时间戳转日期时间 1680537600

先将time_t转换为tm,在格式化输出。

struct tm* gmtime(const time_t* timer);
struct tm* localtime(const time_t* timer);
struct tm* localtime(const time_t* timer);
localtime()函数考虑时区,将时间戳转为本地日历时间。

其中 gmtime() 函数是将时间戳转化为 UTC+0 的日历时间,即0时区的世界标准时间,并返回一个struct tm结构体来保存这个时间。

而localtime()函数考虑时区,将时间戳转为本地日历时间。比如用gmtime()函数获得的时间是2018-07-30 00:00:00,那么用localtime()函数在中国地区获得的本地时间会比世界标准时间早8个小时,即2018-07-30 08:00:00。

std::string Snprintf(time_t t) {
	//时间戳转日期时间
	if (t < 0) {
		return "";
	}
	tm tm_ = *localtime(&t);
	char str[100] = {0};
	snprintf(str, sizeof(str), "%04d-%02d-%02d %02d:%02d:%02d",
		tm_.tm_year+1900, tm_.tm_mon+1, tm_.tm_mday, tm_.tm_hour, tm_.tm_min, tm_.tm_sec);
	return std::string(str);
}

日期时间转时间戳:2023/4/4 0:0:0

(1)当前的UTC时间 是从 1970年01月01日 0:00:00 开始到现在所相差的秒数. 如果需要转换为日期, 那么需要通过函数进行转换。

(2)C标准库里的time_t类型, 它代表一个秒数, 从 1970.1.1 00:00 开始到 time_t所代表的时间的间隔的秒数。 (3)C标准库里的日期时间结构体,需要注意的 tm_year 是从1900开始的年份差, 如果需要得到实际的年份,需要+1900,月份+1。如果得到时间戳的话年份需要-1900,月份-1。

使用sscanf将日期时间字符串转为struct tm,再转为time_t。

int64_t Sscanf(const std::string& str) {
	//日期时间转时间戳
	//使用sscanf将日期时间字符串转为struct tm,再转为time_t。
	tm tm_ = { 0 };
	if (3== sscanf(str.c_str(), "%d/%d/%d",
		&tm_.tm_year, &tm_.tm_mon, &tm_.tm_mday)) {
		tm_.tm_year = tm_.tm_year - 1900;
		tm_.tm_mon = tm_.tm_mon - 1;
	}
	time_t t_ = mktime(&tm_);
	return t_ * 1000;
}

主函数:

int main(){
	std::cout << Snprintf(1680537600) << std::endl;
	std::string str = "2023/4/4";
	int64_t tm = Sscanf(str);
	std::cout << tm << std::endl;
	return 0;
}

输出结果:

2023-04-04 00:00:00
1680537600000
请按任意键继续. . .

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

测试技术与信号处理实验报告

目录 金属箔式应变片——单臂电桥性能实验 金属箔式应变片——半桥性能实验 金属箔式应变片——全桥性能实验 差动变压器的性能实验 直流全桥的应用——电子秤实验 交流激励时霍尔式传感器的位移特性实验 电容式传感器的位移实验 磁电式转速传感器测速实验 金属箔式应变…

C++ -- 继承

文章目录1. 继承的概念和定义1.1 概念1.2 定义1.2.1 定义格式1.2.2 继承基类成员访问方式的变化2. 基类和派生类对象赋值转换3. 继承中的作用域4. 派生类的默认成员函数5. 继承与友元6. 继承与静态成员7. 复杂的菱形继承及菱形虚拟继承8. 继承和组合1. 继承的概念和定义 1.1 概…

听歌无线耳机哪个品牌好?2023适合听歌的好音质蓝牙耳机推荐

现如今&#xff0c;不管是听歌、追剧或是玩游戏&#xff0c;不少人喜欢戴蓝牙耳机进行。因为蓝牙耳机的功能更丰富&#xff0c;连接方便&#xff0c;还摆脱了线的束缚&#xff0c;使用起来更方便。那么&#xff0c;听歌无线耳机哪个品牌好&#xff1f;针对这个问题&#xff0c;…

『造轮子』亿级短URL生成器的架构设计及源码分享

&#x1f4e3;读完这篇文章里你能收获到 了解博主的短链生成的架构设计思路学习不同的短链技术方案选择学习基于混淆的自增短URL算法了解博主造的轮子SuperShortLink短链开源项目感谢点赞收藏&#xff0c;避免下次找不到~ 文章目录一、需求分析1. 短链生成及访问需求2. 短链应…

Python+requests+unittest+excel接口自动化测试框架

一、框架结构&#xff1a; 工程目录 二、Case文件设计 三、基础包 base 3.1 封装get/post请求&#xff08;runmethon.py&#xff09; 1 import requests2 import json3 class RunMethod:4 def post_main(self,url,data,headerNone):5 res None6 if heade…

互联网医院源码|搭建互联网医院系统时运营需要哪些资质?

目前一线城市已经都有完善的医疗系统&#xff0c;人们对于线上问诊系统越来越熟悉&#xff0c;使用的人也越来越多&#xff0c;对于一些偏远的地区来说在线问诊平台有着更广泛的应用和意义&#xff0c;互联网医院开发实现了医疗资源共享的情况&#xff0c;打破了地域限制&#…

文献管理软件Endnote、Mendeley、Zotero比较及选择,Zotero基础使用技巧

引言 大家好&#xff0c;我是比特桃。日常开发的项目分为两种&#xff0c;一种是成熟化的工程项目&#xff0c;只需要与具体的业务紧密结合及应用&#xff0c;难点也比较偏向于软件工程或者互联网高并发的方向。这种项目我们通常不会选择去查文献去寻找问题的解决办法&#xf…

微信小程序开发 | 音乐小程序项目

音乐小程序项目3.1 开发前的准备3.1.1 项目展示3.1.2 项目分析3.1.3 项目初始化3.2 【任务1】标签页切换3.2.1 任务分析3.2.2 前导知识3.2.3 编写页面结构和样式3.2.4 实现标签页切换3.3 【任务2】音乐推荐3.3.1 任务分析3.3.2 前导知识3.3.3 内容区域滚动3.3.4 轮播图3.3.5 功…

15-721 chapter2 内存数据库

Background 随着时代的发展&#xff0c;DRAM可以容纳足够的便宜&#xff0c;容量也变大了。对于数据库来说&#xff0c;数据完全可以fit in memory&#xff0c;但同时面向disk的数据库架构不能很好的发挥这个特性 这张图是disk database的cpu instruction cost 想buffer pool…

使用PyG(PyTorch Geometric)实现基于图卷积神经网络(GCN)的节点分类任务

文章目录基本介绍PyTorch Geometric图卷积神经网络GCN节点分类任务实现Cora数据集搭建GCN模型训练与测试迭代并输出完整代码基本介绍 PyTorch Geometric PyG&#xff08;PyTorch Geometric&#xff09;是一个基于PyTorch的库&#xff0c;可以轻松编写和训练图神经网络&#x…

ChatGPT,开启人机交互新篇章

ChatGPT在世界掀起了生成式AI的热潮&#xff0c;2个月实现月活用户过亿&#xff0c;是人类有史以来突破1亿人用户最快的消费端互联网产品&#xff0c;打破了Tiktok9个月破亿用户的纪录。不少专家将其视为第四次工业革命&#xff0c;资本市场也贡献大量涨停。当第一波的热情消退…

Android 7.1 Toast修复之终极篇,进程不奔溃(包含apk和兼容外来dex插件)

修复android 7.1 Toast的篇章&#xff1a; 常规app通过ams lancet 字节编码处理&#xff1a;Android Lancet Aop 字节编码修复7.1系统Toast问题(WindowManager$BadTokenException)多渠道游戏app兼容性处理:Android 7.1 Toast修复之多渠道包动态使用Booster或者Lancet plugin …

在外web浏览器远程访问jupyter notebook服务器【内网穿透】

文章目录前言视频教程1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口转载自远控源码文章&#xff1a;公网远程访问jupyter notebook【cpolar内网穿透】 前言 Jupyter Notebook&#xff0c;它是一个交…

未来城市的微小单元:滴滴即将量产无人车

汽车诞生之后就一直作为除了家庭与公司之外的「第三空间」存在&#xff0c;技术的脚步从未停止过开发汽车的更多可能。尤其无人驾驶技术的出现&#xff0c;进一步解放了驾驶者&#xff0c;也让人们对于这一能够自主移动的第三空间充满了想象。作为未来城市的微小组成单元&#…

( “树” 之 DFS) 226. 翻转二叉树 ——【Leetcode每日一题】

226. 翻转二叉树 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1] 示例 2&#xff1a; 输入&#xff1a;root [2,1,3] 输出&#xff1a;[…

ThreadLocal源码分析及内存泄漏

ThreadLocal原理分析及内存泄漏ThreadLocal的使用ThreadLocal原理set方法解析replaceStaleEntry方法解析expungeStaleEntry方法解析cleanSomeSlots方法解析case 1: 向前有脏数据&#xff0c;向后找到可覆盖的Entrycase 2: 向前有脏数据&#xff0c;向后未找到可覆盖的Entrycase…

吴恩达机器学习--线性回归

文章目录前言一、单变量线性回归1.导入必要的库2.读取数据3.绘制散点图4.划分数据5.定义模型函数6.定义损失函数7.求权重向量w7.1 梯度下降函数7.2 最小二乘法8.训练模型9.绘制预测曲线10.试试正则化11.绘制预测曲线12.试试sklearn库二、多变量线性回归1.导入库2.读取数据3.划分…

掌握高效绘制地图的利器——LeafletJs

文章目录前言一、leafletJs是什么&#xff1f;二、快速入门1、安装2、快速入门三、进阶学习1、Map 控件2、Marker 标记3、Popup 弹出窗口4、图层四、项目实战封装文件4.1 基础点位图4.2 行驶轨迹图前言 GIS 作为获取、存储、分析和管理地理空间数据的重要工具&#xff0c;用 G…

数据结构与算法一览(树、图、排序算法、搜索算法等)- Review

算法基础简介 - OI Wiki (oi-wiki.org) 文章目录1. 数据结构介绍1.1 什么是数据结构1.2 数据结构分类2. 链表、栈、队列&#xff1a;略3. 哈希表&#xff1a;略4. 树4.1 二叉树4.2 B 树与 B 树4.3 哈夫曼&#xff08;霍夫曼&#xff09;树&#xff1a;Huffman Tree4.4 线段树&a…

编辑文件/文件夹权限 - Win系统

前言 我们经常会遇到由于权限不够无法删除文件/文件夹的情况&#xff0c;解决方案一般是编辑文件/文件夹的权限&#xff0c;使当前账户拥有文件的完全控制权限&#xff0c;然后再进行删除&#xff0c;下文介绍操作步骤。 修改权限 查看用户权限 右键文件/文件夹&#xff0c;…