在 C++ 中打印系统时间

Jinku Hu 2023年10月12日
  1. 使用 std::chrono::system_clockstd::ctime 在 C++ 中打印系统时间
  2. 使用 timelocaltimestrftime 在 C++ 中打印系统时间
在 C++ 中打印系统时间

本文将说明几种如何在 C++ 中打印系统时间的方法。

使用 std::chrono::system_clockstd::ctime 在 C++ 中打印系统时间

std::chrono::system_clock 代表系统范围内的时钟,它提供了两个函数来与 std::time_t 类型进行相互转换。我们可以使用 ctime 函数处理后一个对象,并返回以 null 终止的字符串,形式为 Wed Jun 30 21:49:08 1993\n。在这种情况下,我们构造了一个单独的函数来封装两个调用,并将 string 值返回给调用者。注意,我们还删除了换行符,以更灵活的形式返回值。另外,system_clock::now 用于检索当前时间点。

#include <sys/time.h>

#include <chrono>
#include <ctime>
#include <iostream>

using std::cout;
using std::endl;
using std::string;

std::string timeToString(std::chrono::system_clock::time_point &t) {
  std::time_t time = std::chrono::system_clock::to_time_t(t);
  std::string time_str = std::ctime(&time);
  time_str.resize(time_str.size() - 1);
  return time_str;
}

int main() {
  auto time_p = std::chrono::system_clock::now();
  cout << "Current time: " << timeToString(time_p) << endl;

  return EXIT_SUCCESS;
}

输出:

Current time: Fri Apr  1 01:34:20 2021

如下面的示例所示,还可以使用相同的方法以类似的形式显示 Epoch 值。请注意,对于 POSIX/UNIX 系统,Epoch 通常是 1970 年 1 月 1 日,但是对于 chrono 库中提供的不同时钟,它不需要是相同的值。

#include <sys/time.h>

#include <chrono>
#include <ctime>
#include <iostream>

using std::cout;
using std::endl;
using std::string;

std::string timeToString(std::chrono::system_clock::time_point &t) {
  std::time_t time = std::chrono::system_clock::to_time_t(t);
  std::string time_str = std::ctime(&time);
  time_str.resize(time_str.size() - 1);
  return time_str;
}

int main() {
  std::chrono::system_clock::time_point time_p2;
  cout << "Epoch: " << timeToString(time_p2) << endl;

  return EXIT_SUCCESS;
}

输出:

Epoch: Thu Jan  1 00:00:00 1970

使用 timelocaltimestrftime 在 C++ 中打印系统时间

另外,我们可以使用 POSIX 特定的函数-time,并直接检索 time_t 结构体。time_t 本质上是一个整数,存储自纪元以来的秒数。与前面的方法类似,我们可以使用 ctime 转换为预定义形式的字符串,或者调用 localtime 函数。localtime 函数将 time_t 对象转换为 tm 结构,该结构是细分的时间格式,可以使用特殊说明符来格式化输出字符串。格式化是通过带有四个参数的 strftime 函数完成的,最后一个参数是指向 struct tm 的指针。第一个参数指定存储字符串的内存地址,后两个参数是字符串的最大大小和格式说明符。格式规范的详细概述可以在此网页上找到。

#include <sys/time.h>

#include <ctime>
#include <iostream>

using std::cout;
using std::endl;
using std::string;

int main() {
  char tt[100];
  time_t now = time(nullptr);
  auto tm_info = localtime(&now);

  strftime(tt, 100, "%Y-%m-%d %H:%M:%S", tm_info);
  puts(tt);

  return EXIT_SUCCESS;
}

输出:

2021-04-02 05:42:46
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 创始人。Jinku 在机器人和汽车行业工作了8多年。他在自动测试、远程测试及从耐久性测试中创建报告时磨练了自己的编程技能。他拥有电气/电子工程背景,但他也扩展了自己的兴趣到嵌入式电子、嵌入式编程以及前端和后端编程。

LinkedIn Facebook

相关文章 - C++ Time