c 11 處理時間和日期

2022-04-28 16:12:09 字數 2529 閱讀 5411

c++11提供了日期時間相關的庫 chrono,通過chrono庫可以很方便的處理日期和時間。

1. 記錄時間長度的duration

template>

class duration;

//第乙個模板引數rep是乙個數值型別,表示時鐘數的型別;第二個模板引數是乙個預設模板引數 std::ratio,表示時鐘週期。

templateclass ratio;

//ratio表示分子除以分母得到的分數值,單位為秒。如 ratio<2> 表示乙個時鐘週期為2秒,ratio<1,1000> 表示乙個時鐘週期為1/1000秒。如有:

typedef duration > hours;

typedef duration> seconds;

typedef duration> microseconds;

通過定義這些常用的時間間隔型別,可以很方便的使用它們,比如執行緒的休眠:

std::this_thread::sleep_for(std::chrono::seconds(3));

std::this_thread::sleep_for(std::chrono::microseconds(3));

duration可以進行運算,如計算兩個之差:

std::chrono::minutes t1(10);

std::chrono::seconds t2(60);

std::chrono::seconds t3 = t1 - t2; //只能為 minute向seconds,milliseconds轉換,不能反過來

std::cout << t3.count() << " seconds" << std::endl;

chrono::duration> d1(3);

std::chrono::duration> d2(1);

auto d3 = d1 - d2;

cout << typeid(d3).name() << endl;

cout << d3.count() << endl;

//得到的d3的 typeid(t3).name()為 std::chrono::duration>;

duration可以進行不同時鐘週期的轉換,通過 duration_cast來實現:

std::chrono::minutes t1(10);

std::chrono::seconds t2(60);

std::chrono::milliseconds t3 = t1 -t2;

std::cout << t3.count() << " milliseconds" << std::endl;

std::cout << std::chrono::duration_cast(t3).count() << " minutes" << std::endl;

//將秒的時鐘週期轉換為分鐘的時鐘週期,然後通過count得到轉換後的分鐘時鐘週期的時間間隔

2. 表示時間點的time point

using namespace std::chrono;

using days_type = duration < int, std::ratio<60 * 60 * 24> > ;

time_pointtoday =

time_point_cast(system_clock::now());

std::cout << today.time_since_epoch().count() << " days since epoch" << endl;

time_point還支援一些算術運算,比如兩個 time_point 的差值時鐘週期數,還可以和duration 相加減。要注意不同的clock的time_point是不能進行算術運算的。

system_clock::time_point now = system_clock::now();

std::time_t last = system_clock::to_time_t(now - hours(24));

std::time_t next = system_clock::to_time_t(now + hours(24));

std::cout << "one day ago, time was : " << std::asctime(std::localtime(&last)) << std::endl;

std::cout << "one day after, time is : " << std::asctime(std::localtime(&next)) << std::endl;

3. 獲取系統時鐘的clocks

std::time_t now_c = std::chrono::system_clock::to_time_t(now);

std::chrono::time_pointtp = std::chrono::system_clock::from_time_t(now_c);

c 11之日期和時間庫

本文主要介紹 std chrono日期和時間用法。演示環境 vs2017 1 include 2 include 如果需要使用執行緒其表示一段時間,可以是這段時間單位可以是秒 分鐘 小時 微秒,可以在這裡看到詳情 突然抽風,上不去了 無法貼出相關定義原始碼了。乙個例子,執行緒休眠2秒 std thi...

Python3處理日期與時間

import time 獲取當前時間的時間戳 print time.time 獲取10位時間戳 print int time.time 獲取13位時間戳 示例 import time 時間戳 結構化時間元組 print time.localtime print time.localtime time...

c 11中的日期和時間庫

c 11提供了日期時間相關的庫chrono,通過chrono相關的庫我們可以很方便的處理日期和時間。c 11還提供了字串的寬窄轉換功能,也提供了字串和數字的相互轉換的庫。有了這些庫提供的便利的工具類,我們能方便的處理日期和時間相關的轉換和格式輸出。chrono庫主要包含了三種型別 時間間隔durat...