首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 日期時間加減運算:手工拆解與 chrono 庫現代寫法

     編輯:程式設計綜合問答

手工實現邏輯

日期時間分離處理:

  1. 時間加減:秒/分/時進位,跨天則調用日期增減。
  2. 日期加減:
    • 年/月/日分解。
    • 月份天數表:{31,28,31,30,31,30,31,31,30,31,30,31},閏年 2 月 29 天((y%4==0&&y%100!=0)||y%400==0)。
    • 加月:month += n; year += (month-1)/12; month = (month-1)%12+1;,日數超過該月最大日則截斷。

C++20 一行代碼

using namespace std::chrono;
auto tp = sys_days{2015y/3/30} + 23h + 20min + 20s;
tp -= months(1);      // 減一個月
tp += hours(2);       // 加兩小時
auto dp = floor(tp);
auto ymd = year_month_day{dp};
auto time = make_time(tp - dp);

C++11/14 替代方案

  • Howard Hinnant's date.h:單頭文件,C++11 兼容,標準化前身。
  • Boost.Date_Time:功能全但依賴重。

建議

新項目直接用 C++20 ;存量代碼引入 date.h 過渡。手工實現僅作教學或極度受限環境。|

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved