如何在 C++ 中以毫秒为单位获取时间
-
使用
std::chrono::system_clock::now()
方法在 C++ 中获取以毫秒为单位的时间 -
使用
gettimeofday()
函数在 C++ 中获得以毫秒为单位的时间 -
C++ 中使用
time()
函数获取时间(毫秒)
本文将介绍多种 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 <chrono>
#include <iostream>
#include <sys/time.h>
#include <ctime>
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 <chrono>
#include <iostream>
#include <sys/time.h>
#include <ctime>
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 <chrono>
#include <iostream>
#include <sys/time.h>
#include <ctime>
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
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn