如何在 C++ 中以毫秒为单位获取时间
本文将介绍多种 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
返回 int
值 0
表示成功,-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
相关文章
如何在 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++ 中的递归 Lambda 函数
发布时间:2023/09/02 浏览次数:203 分类:C++
-
在本文中,我们将了解 C++ 中可用的递归 lambda。C++ 递归 Lambda 函数 递归是指函数(直接或间接)调用自身的过程,这个过程对应的函数称为递归函数。 递归 lambda 表达式是此过程的结果。