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)任务中,用户在处理长文本时…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
