C++小白实习日记——Day 2 TSCNS怎么读取当前时间
和老板问了一下,今天就可以自己上手了:
用TSCNS写了一个cpp,运行出来老板说让我去看看另一个项目是怎么做的
用TSCNS和std库获取当前时间
#include <iostream>
#include <iomanip>
#include "tscns.h"using namespace std;TSCNS tn;int main() {// 初始化 TSCNS 对象tn.init();// 获取当前时间的纳秒级时间戳(UTC)int64_t timestamp_ns = tn.rdns();// 将纳秒时间戳转换为秒int64_t timestamp_sec = timestamp_ns / tn.NsPerSec;int64_t nanoseconds = timestamp_ns % tn.NsPerSec; // 获取纳秒部分// 添加 8 小时偏移(以秒为单位)以获取北京时间int64_t beijing_time_sec = timestamp_sec + 8 * 3600;// 将秒转换为 tm 结构体std::time_t beijing_time_t = static_cast<std::time_t>(beijing_time_sec);std::tm beijing_time_tm = *std::gmtime(&beijing_time_t); // 使用 gmtime 将其视为 UTC 时间处理// 格式化输出北京时间(精确到纳秒),不带冒号,格式为 YYYYMMDD HHMMSSnnnnnnnnncout << "Current Beijing Time: "<< std::put_time(&beijing_time_tm, "%Y%m%d ")<< std::setw(2) << std::setfill('0') << beijing_time_tm.tm_hour<< std::setw(2) << std::setfill('0') << beijing_time_tm.tm_min<< std::setw(2) << std::setfill('0') << beijing_time_tm.tm_sec<< std::setw(9) << std::setfill('0') << nanoseconds<< endl;return 0;
}
-
初始化
TSCNS
对象:调用tn.init()
初始化TSCNS
对象tn
,完成基于 TSC(Time Stamp Counter)和系统时间的初始同步与校准。 -
获取当前时间戳:通过
tn.rdns()
获取当前时间的纳秒值并将其存储到timestamp
变量中。 -
执行校准:调用
tn.calibrate()
方法进行校准。这是可选的,用于定期修正 TSC 和系统时间的误差。 -
计算时间的小时、分钟、秒、毫秒和纳秒部分:
- 将
timestamp
转换为秒和纳秒部分。 - 使用整数除法和取余操作提取小时、分钟、秒等信息。
- 将纳秒部分进一步转换为毫秒,剩余的部分保留为纳秒。
- 将
-
输出格式化的时间:
- 使用
std::setfill('0')
和std::setw()
来格式化输出,使得小时、分钟和秒数都有两位数,毫秒为三位数。 - 输出了两种格式:一种是精确到毫秒的格式(
HHMMSSmmm
),另一种是精确到纳秒的格式(HHMMSSnnnnnnnnn
)。
- 使用
一些零碎知识点
setfill('0')
setfill
是一个操纵器,用来设置输出时的填充字符。通常在输出较小数字时,如果不满足指定的宽度,可以使用填充字符填补前面的空位。
setfill('0')
的作用是将输出数字前面不足的部分用字符'0'
填充。- 例如:在输出两位数的时间格式时,可以用
setfill('0')
来确保个位数前面会填充0
,以确保始终是两位数显示。
setw(width)
setw()
是一个操纵器,用来指定输出字段的宽度。它会影响接下来输出的一个值,将其宽度设置为指定的 width
。
- 如果输出的值宽度小于
width
,则在左侧用填充字符填充(默认是空格,使用setfill
可以更改填充字符)。 - 如果输出的值宽度大于或等于
width
,则setw()
会被忽略,不会截断数字
std库获取时间
- 使用
std::chrono::system_clock::now()
获取当前系统时间。 - 转换为 UTC 时间:
std::gmtime()
函数将time_t
转换为 UTC 时间 std::time_t
是一个用于表示时间点的类型,通常表示自 Unix 纪元(1970 年 1 月 1 日 00:00:00 UTC)以来的秒数。std::time_t
是 C++ 标准库中的类型,-
std::tm
结构体std::tm
结构体定义在<ctime>
头文件中,包含了多个成员变量,每个成员变量表示日期和时间的不同组成部分。具体成员包括:
tm_mday : | 小时(0 到 23)。 |
| 分钟(0 到 59)。 |
tm_sec : | 秒(0 到 60,允许闰秒)。 |
tm_wday : | 星期几(0 表示星期日)。 |
tm_yday : | 从 1 月 1 日开始的天数(0 到 365)。 |
UTC时间
UTC 时间(协调世界时,Coordinated Universal Time)是一种标准时间,用于全球时间同步
UTC的特点
- 不受时区影响:UTC 是全球统一的时间,不偏向任何一个时区。
- 与 GMT 的关系:UTC 和格林尼治标准时间(GMT)相似,但 UTC 更精确。GMT 是历史上的一种时间标准,基于天文观测,UTC 则基于原子钟。
- 没有夏令时:UTC 时间不会因季节变化而调整,因此不同国家或地区可以根据 UTC 时间确定本地时间的偏移量。
UTC 与时区
地球被划分为 24 个时区,每个时区都相对 UTC 有一个时差。例如:
- 北京时间(CST)为 UTC+8,意味着北京时间比 UTC 时间早 8 小时。
- 纽约时间(EST)为 UTC-5,但在夏令时为 UTC-4。
static_case
static_cast
是 C++ 中的一种类型转换方式,用于在编译时执行类型转换
static_cast<目标类型>(表达式);
static_cast<std::time_t>(beijing_time_sec)
将整数 beijing_time_sec
转换为 std::time_t
类型
auto关键字
auto
关键字:
auto
是 C++ 中的类型自动推导关键字。在编译时,编译器会根据右侧表达式的类型推导出auto
的实际类型。
::作用域解析运算符
::
是 C++ 中的作用域解析运算符(Scope Resolution Operator)。它用于指定某个标识符(例如变量、函数、类)所在的命名空间或类作用域,以便编译器找到正确的定义。
在 TSCNS::NsPerSec
中,::
表示 NsPerSec
是 TSCNS
类中的一个静态成员变量。这里 TSCNS
是类名,而 NsPerSec
是该类的一个静态常量,::
将它们连接起来,表示访问 TSCNS
类中的 NsPerSec
成员。
class TSCNS {
public:static const int64_t NsPerSec = 1000000000; // 每秒的纳秒数
};// 在其他地方访问
int64_t nanoseconds_in_a_second = TSCNS::NsPerSec;
老板说,1,不要用std库
2.不要setfill
相关文章:
C++小白实习日记——Day 2 TSCNS怎么读取当前时间
和老板问了一下,今天就可以自己上手了: 用TSCNS写了一个cpp,运行出来老板说让我去看看另一个项目是怎么做的 用TSCNS和std库获取当前时间 #include <iostream> #include <iomanip> #include "tscns.h"using namespace std;TSCN…...

【Pythonr入门第二讲】你好,世界
"Hello, World!" 是一种传统的编程入门示例,通常是程序员学习一门新编程语言时编写的第一个程序。这个程序的目标非常简单:在屏幕上输出 "Hello, World!" 这个字符串。尽管它非常简单,但具有重要的象征意义和实际价值。 …...

3D Streaming 在线互动展示系统:NVIDIA RTX 4090 加速实时渲染行业数字化转型
随着科技的飞速发展,实时渲染正逐步成为游戏与实时交互领域的重要驱动力。与离线渲染不同,实时渲染需要极高的计算性能,对硬件设备尤其是GPU的性能要求极高。随着 RTX 4090 显卡的问世,其强大的算力和创新技术,为实时渲…...
Oracle 单机及 RAC 环境 db_files 参数修改
Oracle 数据库中 DB_FILES 定义了数据库中数据文件的个数,默认值为200,如果创建数据库文件时超过DB_FILES 定义的值就会报 ORA-00059 错误。 下面分别演示单机及 RAC 环境下修改 db_files 参数的操作步骤。 一、单机环境 1.查询当前参数值 SQL> sh…...

消息中间件分类
消息中间件(Message Middleware)是一种在分布式系统中实现跨平台、跨应用通信的软件架构。它基于消息传递机制,允许不同系统、不同编程语言的应用之间进行异步通信。 常见的消息中间件类型包括: 1. JMS(Java Message S…...
讯飞、阿里云、腾讯云:Android 语音合成服务对比选择
在 移动端 接入语音合成方面,讯飞和腾讯云等都是优秀的选择,但各有其特点和优势。咱们的需求是需要支持普通话/英语/法语三种语言,以下是对各个平台的详细比较: 一、讯飞语音合成介绍 与语音听写相反,语音合成是将一段…...
SpringBoot开发——整合AJ-Captcha实现安全高效的滑动验证码
文章目录 一、什么是AJ-Captcha二、项目配置1、Maven依赖配置2、滑动验证码的基本原理3、 后端实现3.1 生成滑动验证码图片代码解释3.2 校验滑块位置代码解释4、前端部分代码解释5、Redis 缓存滑动验证码信息5.1 Redis配置5.2使用Redis缓存验证码数据5.3 校验时从Redis获取总结…...
Spring Security 核心组件
Spring Security 是一个功能全面的安全框架,用于处理基于 Spring 应用程序的身份验证和授权。 它提供了开箱即用的支持,采用行业标准的做法和机制来保护你的应用。 无论你是开发简单的 Web 应用还是复杂的微服务架构,理解 Spring Security …...

聚焦 AUTO TECH 2025华南展:探索新能源汽车发展新趋势
随着“新四化”浪潮的推进,汽车行业正经历前所未有的变革。中国新能源汽车正逐渐走向世界。国内汽车制造巨头如比亚迪、吉利、奇瑞、长安等,已经将出口提升至核心战略地位。中国新能源汽车的发展,不仅推动了全球汽车产业的电动化转型…...

Python-简单病毒程序合集(一)
前言:简单又有趣的Python恶搞代码,往往能给我们枯燥无味的生活带来一点乐趣,激发我们对编程的最原始的热爱。那么话不多说,我们直接开始今天的编程之路。 编程思路:本次我们将会用到os,paltform,threading,ctypes,sys,…...

[STM32]从零开始的STM32 HAL库环境搭建
一、前言 之前在搭建STM32的标准库环境时就告诉过大家,开发STM32的方式主要有三种。一种是最原始但是效率最高的寄存器开发,另一种是效率仅次于寄存器难度相对较低的标准库开发,最后一种是最为简单但是程序效率最低的HAL库开发。如果对于初学…...

Docker部署Kafka SASL_SSL认证,并集成到Spring Boot
1,创建证书和密钥 需要openssl环境,如果是Window下,下载openssl Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions 还需要keytool环境,此环境是在jdk环境下 本案例所使用的账号密码均为: ka…...

Pr:音频过渡
Adobe Premiere Pro 自带一组共三个音频过渡 Audio Transitions效果。 对音频剪辑之间应用交叉淡化 Crossfade过渡,操作方式类似于应用视频过渡效果。 对于交叉淡化,要保证前剪辑的出点之后及后剪辑的入点之前有足够的预留内容(也称“手柄”&…...

HarmonyOs鸿蒙开发实战(17)=>沉浸式效果第二种方案一组件安全区方案
1.沉浸式效果的目的 开发应用沉浸式效果主要指通过调整状态栏、应用界面和导航条的显示效果来减少状态栏导航条等系统界面的突兀感,从而使用户获得最佳的UI体验。 2.组件安全区方案介绍 应用在默认情况下窗口背景绘制范围是全屏,但UI元素被限制在安全区内…...
从 const 到 mutable:C++ 中的优雅妥协与设计智慧
在C编程中,const 关键字被广泛应用于确保数据的不变性,它提供了一种强大的机制来防止意外修改,从而增强了代码的可靠性和可维护性。然而,在某些特定场景下,完全的不变性可能会限制设计的灵活性,这时 mutabl…...

CC工具箱使用指南:【CAD导出界址点Excel】
一、简介 群友定制工具。 面图层导出界址点Excel表之前已经做过好几个,这个工具则是将CAD导出Excel。 CAD数据如下: 工具将如上截图中的边界线导出界址点Excel,并记录下面内的文字。 二、工具参数介绍 点击【定制工具】组里的【CAD导出界…...
制作图片马常用的五种方法总结
目录 1. 以文本方式2. Windows的cmd方式3. PhotoShop方式4. 16进制5. Linux的cat方式 图片马:就是在图片中隐藏一句话木马。利用.htaccess等解析图片为PHP或者asp文件。达到执行图片内代码目的。 1. 以文本方式 用文本方式(这里用notepad。如果用记事本的方式打开…...
深入解析MySQL中的事务处理
一、引言 事务是数据库管理系统执行过程中的一个逻辑单位,它由一系列操作组成,这些操作要么全部执行,要么全部不执行。事务在保证数据的一致性、隔离性、持久性方面发挥着重要作用。MySQL作为一个广泛使用的数据库管理系统,对事务…...

TCP Analysis Flags 之 TCP Dup ACK
前言 默认情况下,Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态,并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时,会对每个 TCP 数据包进行一次分析,数据包按照它们在数据包列表中出现的顺序进行处理。可…...

r-and-r——提高长文本质量保证任务的准确性重新提示和上下文搜索的新方法可减轻大规模语言模型中的迷失在中间现象
概述 随着大规模语言模型的兴起,自然语言处理领域取得了重大发展。这些创新的模型允许用户通过输入简单的 "提示 "文本来执行各种任务。然而,众所周知,在问题解答(QA)任务中,用户在处理长文本时…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...