当前位置: 代码迷 >> 综合 >> c++11:std::chrono::time_point、time_t、std::localtime、std::gmtime、std::chrono::steady_clock
  详细解决方案

c++11:std::chrono::time_point、time_t、std::localtime、std::gmtime、std::chrono::steady_clock

热度:0   发布时间:2024-02-28 04:36:59.0
template<class Clock,class Duration = typename Clock::duration> 
class time_point;

类模板 std::chrono::time_point 表示时间中的一个点。它被实现成如同存储一个 Duration 类型的自 Clock 的纪元起始开始的时间间隔的值。(通俗来讲,time_point存储一个时间点,这个时间点是指从CLock纪元开始,往后Duration类型的值所代表的那个时间点)

Clock 必须满足时钟 (Clock) 的要求或为 std::chrono::local_t (C++20 起)

成员类型 定义
clock Clock ,此时间点在此时钟上计量
duration Duration ,用于计量从纪元起时间的 std::chrono::duration 类型
rep Rep ,表示时期的计次数的算术类型
period Period ,表示时期周期的std::ratio 类型

成员函数

time_since_epoch

返回表示为从其时钟起点开始的时间点

 非成员函数

time_point_cast      

转换时间点为同一时钟上拥有不同时长的另一时间点

time_t:出于历史原因,通常将其实现为一个整数值,该整数值表示自UTC(1970年1月1日)00:00小时以来经过的秒数(即unix时间戳

std::localtime:将time_t转换为本地日历时

std::gmtime:将time_t转换为世界时

std::chrono::steady_clock:类 std::chrono::steady_clock 表示单调时钟。此时钟的时间点无法减少,因为物理时间向前移动。此时钟与壁钟时间无关(例如,它能是上次重启开始的时间),且最适于度量间隔。

#include <iostream>
#include <iomanip>
#include <ctime>
#include <chrono>int main()
{std::chrono::system_clock::time_point now = std::chrono::system_clock::now();std::time_t now_c = std::chrono::system_clock::to_time_t(now - std::chrono::hours(24));std::cout << "24 hours ago, the time was "<< std::put_time(std::localtime(&now_c), "%F %T") << '\n';std::chrono::steady_clock::time_point start = std::chrono::steady_clock::now();std::cout << "Hello World\n";std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now();std::cout << "Printing took "<< std::chrono::duration_cast<std::chrono::microseconds>(end - start).count()<< "us.\n";
}

运行结果: