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)任务中,用户在处理长文本时…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
