C++: 输出Windows平台或Linux平台时间信息的函数

记录一个可以输出Widnows或Linux时间信息的C++函数。

一、函数代码:

cpp 复制代码
string GetCurrentTimestamp()
{
        time_t now = time(nullptr);
        tm timeInfo;

        // 跨平台UTC时间处理
#if defined(_WIN32)
    gmtime_s(&timeInfo, &now);
#else
        gmtime_r(&now, &timeInfo);
#endif

        ostringstream oss;
        oss << put_time(&timeInfo, "%Y-%m-%dT%H:%M:%SZ");
        return oss.str();
}

二、代码分析:

1.1 time_t now = time(nullptr);

  • time_t 是 C 标准库中用于表示时间的类型,通常用于存储自 1970 年 1 月 1 日以来的秒数(UNIX 时间戳)。
  • time(nullptr) 返回当前时间的秒数(从 Epoch,即 1970 年 1 月 1 日以来的秒数)。nullptr 在此处表示没有指定时间(即获取当前系统时间)。

1.2 tm timeInfo;

  • tm 是一个结构体,用于存储时间信息,包括年、月、日、时、分、秒等各个时间成分。
  • 在这个函数中,timeInfo 用来存储转换后的 UTC 时间信息。

1.3 跨平台的 UTC 时间处理

由于 Windows 和 POSIX 系统(如 Linux、macOS)处理 UTC 时间的方式不同,因此代码使用了条件编译来确保跨平台兼容:

  • #if defined(_WIN32):如果在 Windows 系统上编译,使用 gmtime_s 函数来将 now 转换为 UTC 时间并存储到 timeInfo 中。gmtime_s 是 Windows 上的线程安全版本。
  • #else:在非 Windows 系统(如 Linux 或 macOS)上,使用 gmtime_r 函数,该函数也是线程安全的,用于将 now 转换为 UTC 时间。

1.4 ostringstream oss;

  • ostringstream 是 C++ 标准库中的一个输出流类,用于将数据格式化成字符串。
  • oss 是一个 ostringstream 类型的对象,用于构建最终的时间戳字符串。

1.5 oss

  • put_time 是 C++11 中的格式化输出函数,用于将 tm 结构体中的时间信息格式化为指定的字符串格式。
  • "%Y-%m-%dT%H:%M:%SZ" 是格式字符串,表示时间格式为:
    • %Y:四位数的年份(如 2025)。
    • %m:两位数的月份(如 06)。
    • %d:两位数的日期(如 20)。
    • %H:两位数的小时(24 小时制)。
    • %M:两位数的分钟。
    • %S:两位数的秒钟。
    • T:分隔符,符合 ISO 8601 时间格式。
    • Z:表示 UTC 时间的标志。

1.6 return oss.str();

  • oss.str() 获取 ostringstream 中存储的字符串,即格式化后的时间戳。
  • 函数返回这个格式化后的时间戳。

总结:

这个函数的功能是获取当前 UTC 时间,并将其转换为字符串格式,格式为 YYYY-MM-DDTHH:MM:SSZ。它通过使用 time_t 获取当前时间戳,结合 tm 结构体和 gmtime_s(Windows)或 gmtime_r(POSIX 系统)来处理跨平台的 UTC 时间转换,最后用 ostringstream 将时间格式化为字符串并返回。

使用场景:

这个函数常用于获取 ISO 8601 格式的 UTC 时间戳,广泛应用于日志记录、时间戳标记、文件名生成、HTTP 请求等需要精确时间标记的场景。

相关推荐
咬_咬4 分钟前
go语言学习(数组与切片)
开发语言·学习·golang·数组·切片
小陈工6 分钟前
Python Web开发入门(十八):跨域问题解决方案——从“为什么我的请求被拦了“到“我让浏览器乖乖听话“
开发语言·python·机器学习·架构·数据挖掘·回归·状态模式
m0_497214157 分钟前
Qt事件系统
开发语言·qt
AI科技星7 分钟前
全维度相对论推导、光速螺旋时空与北斗 GEO 钟差的统一理论
开发语言·线性代数·算法·机器学习·数学建模
6Hzlia8 分钟前
【Hot 100 刷题计划】 LeetCode 279. 完全平方数 | C++ 动态规划 (完全背包)
c++·leetcode·动态规划
赵优秀一一11 分钟前
Python 工程化基础1:环境(conda)、pip、requirements.txt
linux·开发语言·python
H Journey14 分钟前
C++ 11 新特性 统一初始化与与 std::initializer_list
c++·列表初始化
木子墨51617 分钟前
LeetCode 热题 100 精讲 | 动态规划进阶篇:最大子数组和 · 分割等和子集 · 最长公共子序列 · 打家劫舍 III
数据结构·c++·算法·leetcode·动态规划·力扣
li16709027022 分钟前
第十章:list
c语言·开发语言·数据结构·c++·算法·list·visual studio
游乐码25 分钟前
C#List
开发语言·c#·list