迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > C++ >

如何在 C++ 中以毫秒为单位获取时间

作者:迹忆客 最近更新:2024/01/02 浏览次数:

本文将介绍多种 C++ 方法,介绍如何以毫秒为单位获取时间。


使用 std::chrono::system_clock::now() 方法在 C++ 中获取以毫秒为单位的时间

std::chrono::system_clock 类是 C++ 中获取全系统实时挂钟的接口。大多数系统使用 Unix 时间,它表示为从 1970 年 1 月 1 日 00:00:00 UTC 开始的秒数,称为 Unix 纪元。请注意,闰秒被忽略了。因此 Unix 时间并不是 UTC 的真正准确表示。

首先,调用 now() 方法来返回当前的时间点。接下来调用的方法是 time_since_epoch 来检索*this 和时钟的纪元之间的时间量,但它返回的是一个 std::chrono::duration 类对象。这个对象应该调用 count 方法来返回实际的 ticks 数,并以毫秒来表示。结果使用 duration_cast<milliseconds> 进行投射。

#include <sys/time.h>

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

using std::cout;
using std::endl;
using std::chrono::duration_cast;
using std::chrono::milliseconds;
using std::chrono::seconds;
using std::chrono::system_clock;

int main() {
  auto millisec_since_epoch =
      duration_cast<milliseconds>(system_clock::now().time_since_epoch())
          .count();
  auto sec_since_epoch =
      duration_cast<seconds>(system_clock::now().time_since_epoch()).count();

  cout << "seconds since epoch: " << sec_since_epoch << endl;
  cout << "milliseconds since epoch: " << millisec_since_epoch << endl;

  return EXIT_SUCCESS;
}

输出:

seconds since epoch: 1603612778
milliseconds since epoch: 1603612778389

使用 gettimeofday() 函数在 C++ 中获得以毫秒为单位的时间

gettimeofday 是符合 POSIX 标准的函数,用于检索系统时钟。它以 struct timeval 对象的地址作为第一个参数来存储时间值。值是 tv_sec 代表秒数,tv_usec 代表 Unix 纪元以来的微秒数。gettimeofday 返回 int0 表示成功,-1 表示失败,提供错误处理功能。函数的第二个参数是 struct timezone,但是由于它已经被贬值了,你应该只传递一个 nullptr。注意,你需要在函数定义中加入 <sys/time.h> 头文件。

#include <sys/time.h>

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

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

int main() {
  struct timeval time_now {};
  gettimeofday(&time_now, nullptr);
  time_t msecs_time = (time_now.tv_sec * 1000) + (time_now.tv_usec / 1000);

  cout << "seconds since epoch: " << time_now.tv_sec << endl;
  cout << "milliseconds since epoch: " << msecs_time << endl << endl;

  return EXIT_SUCCESS;
}

输出:

seconds since epoch: 1603612778
milliseconds since epoch: 1603612778389

C++ 中使用 time() 函数获取时间(毫秒)

在 C++ 中,另一种符合 POSIX 标准的检索系统时间的方法是调用 time 函数。time 接受一个类型为 time_t*的可选参数,返回的时间值就存储在这个参数中。另外,也可以使用函数返回值存储在单独声明的变量中。在后一种情况下,可以传递 nullptr 作为参数。注意,这个调用并没有像前面的调用那样以同样的精度返回时间。

#include <sys/time.h>

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

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

int main() {
  time_t now = time(nullptr);
  time_t mnow = now * 1000;

  cout << "seconds since epoch: " << now << endl;
  cout << "milliseconds since epoch: " << mnow << endl << endl;

  return EXIT_SUCCESS;
}

输出:

seconds since epoch: 1603612778
milliseconds since epoch: 1603612778000

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 C++ 中实现毫秒级的睡眠

发布时间:2024/01/02 浏览次数:124 分类:C++

本文介绍了在 C++ 中使用不同方法暂停程序执行,实现睡眠的方法。本文介绍了在 C++ 中睡眠毫秒的方法。使用 std::this_thread::sleep_for 方法在 C++ 中睡眠

如何在 C++ 中将双精度数四舍五入到整数上

发布时间:2024/01/02 浏览次数:88 分类:C++

本文演示了如何在 C++ 中把双精度数四舍五入到整数中。本文将为大家讲解几种在 C++ 中如何将双精度数四舍五入为整数的方法。使用 round() 函数将双精度数四舍五入到整数

在 C++ 中以右对齐输出

发布时间:2024/01/02 浏览次数:148 分类:C++

本文介绍了如何在 C++ 中对输出进行右对齐的方法。本文将演示关于如何在 C++ 中对输出流进行右对齐的多种方法。使用 std::right 和 std::setw 在 C++ 中对输出进行右对齐

在 Python 中将 DateTime 转换为带有毫秒的字符串

发布时间:2023/12/24 浏览次数:127 分类:Python

本教程演示了如何在 Python 中把日期时间对象转换为带毫秒的的字符串。Python 中的 datetime 模块允许我们创建日期和时间对象,很容易操作和转换为不同的格式。

在 C++ 中查找字符串中的第一个重复字符

发布时间:2023/09/04 浏览次数:234 分类:C++

在本文中,您将学习如何在 C++ 中查找字符串中的第一个重复字符。 您将学习实现此目的的三种方法:散列技术、暴力方法和算法的编写。在 C++ 中查找字符串中的第一个重复字符

求 C++ 中的最长公共子串

发布时间:2023/09/04 浏览次数:163 分类:C++

在本文中,我们将讨论最长公共子串问题及其在 C++ 中使用动态规划的解决方案。最长公共子串 最长公共子串(LCS)是计算机科学中的一个众所周知的问题。

C++ 中字符串的第一个字母大写

发布时间:2023/09/04 浏览次数:125 分类:C++

本文将介绍将字符串的第一个字母转换为大写的各种方法。C++ 中字符串的第一个字母大写 我们将分三种不同的情况来处理这个问题:

C++ 运行命令行

发布时间:2023/09/04 浏览次数:202 分类:C++

本文将简要讨论通过 C++ 程序在命令处理器中运行命令的 system() 方法。C/C++ 提供了一个函数,可以执行此操作,而无需产生另一个可以运行命令行处理器来运行 CMD 命令的进程。

C++ 中的递归 Lambda 函数

发布时间:2023/09/02 浏览次数:203 分类:C++

在本文中,我们将了解 C++ 中可用的递归 lambda。C++ 递归 Lambda 函数 递归是指函数(直接或间接)调用自身的过程,这个过程对应的函数称为递归函数。 递归 lambda 表达式是此过程的结果。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便