C++ 時間操作:獲取有史以來的天數與文件計數器

C++ 時間操作:獲取有史以來的天數與文件計數器

在C++中,時間操作是一個非常重要的功能,尤其是在需要處理日期、時間戳或定時任務時。本文將介紹如何利用C++的時間操作功能,實現以下兩個目標:

  1. 獲取從Unix紀元時間(1970-01-01)到當前時間的天數。
  2. 結合時間戳和文件操作,實現一個簡單的計數器:當日期天數增加1時,文件中的數字加1。

1. 獲取從Unix紀元時間到當前時間的天數

Unix紀元時間(1970-01-01 00:00:00 UTC)是計算機系統中常用的時間起點。我們可以通過獲取當前時間的時間戳(以秒為單位),并將其轉換為天數,來計算從Unix紀元時間到當前時間的天數。

以下是實現代碼:

#include <iostream>
#include <ctime>// 獲取從1970-01-01到當前時間的天數
int getDaysSinceEpoch() {// 獲取當前時間的時間戳(秒數)std::time_t now = std::time(nullptr);// 將秒數轉換為天數const int secondsPerDay = 60 * 60 * 24;int daysSinceEpoch = now / secondsPerDay;return daysSinceEpoch;
}int main() {int daysSinceEpoch = getDaysSinceEpoch();std::cout << "Days since 1970-01-01: " << daysSinceEpoch << std::endl;return 0;
}

代碼說明:

  • std::time(nullptr): 獲取當前時間的時間戳(從1970-01-01到現在的秒數)。
  • secondsPerDay: 一天的總秒數(60秒 * 60分鐘 * 24小時)。
  • now / secondsPerDay: 將秒數轉換為天數。

輸出示例:

Days since 1970-01-01: 19623

2. 實現文件計數器:當日期天數增加1時,文件中的數字加1

我們可以結合時間戳和文件操作,實現一個簡單的計數器。具體邏輯如下:

  1. 獲取當前日期的天數。
  2. 讀取上次保存的天數和計數器值。
  3. 如果當前天數比上次保存的天數增加了1,則將計數器加1。
  4. 將新的天數和計數器值保存回文件。

以下是實現代碼:

#include <iostream>
#include <fstream>
#include <ctime>
#include <sstream>// 獲取當前日期的天數
int getCurrentDay() {std::time_t now = std::time(nullptr);std::tm* localTime = std::localtime(&now);return localTime->tm_mday;
}// 從文件中讀取上次保存的天數和計數器值
bool readLastDayAndCounter(const std::string& filename, int& lastDay, int& counter) {std::ifstream inFile(filename);if (!inFile) {return false;}inFile >> lastDay >> counter;return true;
}// 將新的天數和計數器值保存到文件
void saveLastDayAndCounter(const std::string& filename, int lastDay, int counter) {std::ofstream outFile(filename);if (outFile) {outFile << lastDay << " " << counter;}
}int main() {std::string filename = "counter.txt";int lastDay, counter;// 讀取上次保存的天數和計數器值if (!readLastDayAndCounter(filename, lastDay, counter)) {// 如果文件不存在或讀取失敗,初始化天數和計數器lastDay = getCurrentDay();counter = 0;}int currentDay = getCurrentDay();// 如果天數增加了1,計數器加1if (currentDay != lastDay) {counter++;lastDay = currentDay;// 保存新的天數和計數器值saveLastDayAndCounter(filename, lastDay, counter);}std::cout << "Current counter value: " << counter << std::endl;return 0;
}

代碼說明:

  1. getCurrentDay(): 獲取當前日期的天數。
  2. readLastDayAndCounter(): 從文件中讀取上次保存的天數和計數器值。如果文件不存在或讀取失敗,返回false
  3. saveLastDayAndCounter(): 將新的天數和計數器值保存到文件。
  4. main(): 主函數中,首先嘗試讀取上次保存的天數和計數器值。如果讀取失敗,則初始化天數和計數器。然后獲取當前日期的天數,如果天數增加了1,則計數器加1,并保存新的天數和計數器值。

輸出示例:

Current counter value: 10

3. 結合功能:計算任意兩個時間點之間的天數

如果需要計算任意兩個時間點之間的天數,可以使用以下方法:

#include <iostream>
#include <ctime>// 計算兩個時間點之間的天數
int getDaysBetweenTimestamps(std::time_t timestamp1, std::time_t timestamp2) {const int secondsPerDay = 60 * 60 * 24;return (timestamp2 - timestamp1) / secondsPerDay;
}int main() {// 示例:計算從2020-01-01到當前時間的天數std::tm tm = {0, 0, 0, 1, 0, 120}; // 2020-01-01std::time_t startTime = std::mktime(&tm);std::time_t now = std::time(nullptr);int daysBetween = getDaysBetweenTimestamps(startTime, now);std::cout << "Days since 2020-01-01: " << daysBetween << std::endl;return 0;
}

輸出示例:

Days since 2020-01-01: 1234

總結

通過C++的時間操作功能,我們可以輕松實現以下功能:

  1. 獲取從Unix紀元時間到當前時間的天數。
  2. 實現一個基于文件的時間計數器。
  3. 計算任意兩個時間點之間的天數。

這些功能在實際開發中非常有用,例如日志記錄、定時任務、數據統計等場景。希望本文能幫助你更好地理解和使用C++的時間操作功能!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/74219.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/74219.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/74219.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python Bug修復案例分析:Python 中常見的 IndentationError 錯誤 bug 的修復

在 Python 編程的世界里&#xff0c;代碼的可讀性和規范性至關重要。Python 通過強制使用縮進來表示代碼塊的層次結構&#xff0c;這一獨特的設計理念使得代碼更加清晰易讀。然而&#xff0c;正是這種對縮進的嚴格要求&#xff0c;導致開發者在編寫代碼時&#xff0c;稍有不慎就…

【論文筆記】Transformer

Transformer 2017 年&#xff0c;谷歌團隊提出 Transformer 結構&#xff0c;Transformer 首先應用在自然語言處理領域中的機器翻譯任務上&#xff0c;Transformer 結構完全構建于注意力機制&#xff0c;完全丟棄遞歸和卷積的結構&#xff0c;這使得 Transformer 結構效率更高…

CI/CD(三) 安裝nfs并指定k8s默認storageClass

一、NFS 服務端安裝&#xff08;主節點 10.60.0.20&#xff09; 1. 安裝 NFS 服務端 sudo apt update sudo apt install -y nfs-kernel-server 2. 創建共享目錄并配置權限 sudo mkdir -p /data/k8s sudo chown nobody:nogroup /data/k8s # 允許匿名訪問 sudo chmod 777 /dat…

【QA】單件模式在Qt中有哪些應用?

單例設計模式確保一個類僅有一個實例&#xff0c;并提供一個全局訪問點來獲取該實例。在 Qt 框架中&#xff0c;有不少類的設計采用了單例模式&#xff0c;以下為你詳細介紹并給出相應代碼示例。 1. QApplication QApplication 是 Qt GUI 應用程序的核心類&#xff0c;每個 Q…

存儲過程觸發器習題整理1

46、{blank}設有商品表(商品號&#xff0c;商品名&#xff0c;單價)和銷售表(銷售單據號&#xff0c;商品號&#xff0c;銷售時間&#xff0c;銷售數量&#xff0c;銷售單價)。其中&#xff0c;商品號代表一類商品&#xff0c;商品號、單價、銷售數量和銷售單價均為整型。請編寫…

基于ChatGPT、GIS與Python機器學習的地質災害風險評估、易發性分析、信息化建庫及災后重建高級實踐

第一章、ChatGPT、DeepSeek大語言模型提示詞與地質災害基礎及平臺介紹【基礎實踐篇】 1、什么是大模型&#xff1f; 大模型&#xff08;Large Language Model, LLM&#xff09;是一種基于深度學習技術的大規模自然語言處理模型。 代表性大模型&#xff1a;GPT-4、BERT、T5、Ch…

單表達式倒計時工具:datetime的極度優雅(智普清言)

一個簡單表達式&#xff0c;也可以優雅自成工具。 筆記模板由python腳本于2025-03-22 20:25:49創建&#xff0c;本篇筆記適合任意喜歡學習的coder翻閱。 【學習的細節是歡悅的歷程】 博客的核心價值&#xff1a;在于輸出思考與經驗&#xff0c;而不僅僅是知識的簡單復述。 Pyth…

最優編碼樹的雙子性

現在看一些書&#xff0c;不太愿意在書上面做一些標記&#xff0c;也沒啥特殊的原因。。哈哈。 樹的定義 無環連通圖&#xff0c;極小連通圖&#xff0c;極大無環圖。 度 某個節點&#xff0c;描述它的度&#xff0c;一般默認是出度&#xff0c;分叉的邊的條數。或者說孩子…

MiB和MB

本文來自騰訊元寶 MiB 和 ?MB 有區別&#xff0c;盡管它們都用于表示數據存儲的單位&#xff0c;但它們的計算方式不同&#xff0c;分別基于不同的進制系統。 1. ?MiB&#xff08;Mebibyte&#xff09;? ?MiB 是基于二進制的單位&#xff0c;使用1024作為基數。1 MiB 102…

Labview和C#調用KNX API 相關東西

敘述:完全沒有聽說過KNX這個協議...................我這次項目中也是簡單的用了一下沒有過多的去研究 C#調用示例工程鏈接(labview調用示例在 DEBUG文件夾里面) 通過網盤分享的文件&#xff1a;KNX調用示例.zip 鏈接: https://pan.baidu.com/s/1NQUEYM11HID0M4ksetrTyg?pwd…

損失函數理解(二)——交叉熵損失

損失函數的目的是為了定量描述不同模型&#xff08;例如神經網絡模型和人腦模型&#xff09;的差異。 交叉熵&#xff0c;顧名思義&#xff0c;與熵有關&#xff0c;先把模型換成熵這么一個數值&#xff0c;然后用這個數值比較不同模型之間的差異。 為什么要做這一步轉換&…

Kubernetes的Replica Set和ReplicaController有什么區別

ReplicaSet 和 ReplicationController 是 Kubernetes 中用于管理應用程序副本的兩種資源&#xff0c;它們有類似的功能&#xff0c;但 ReplicaSet 是 ReplicationController 的增強版本。 以下是它們的主要區別&#xff1a; 1. 功能的演進 ReplicationController 是 Kubernete…

信息系統運行管理員教程3--信息系統設施運維

第3章 信息系統設施運維 信息系統設施是支撐信息系統業務活動的信息系統軟硬件資產及環境。 第1節 信息系統設施運維的管理體系 信息系統設施運維的范圍包含信息系統涉及的所有設備及環境&#xff0c;主要包括基礎環境、硬件設備、網絡設備、基礎軟件等。 信息系統設施運維…

如何通過Python實現自動化任務:從入門到實踐

在當今快節奏的數字化時代,自動化技術正逐漸成為提高工作效率的利器。無論是處理重復性任務,還是管理復雜的工作流程,自動化都能為我們節省大量時間和精力。本文將以Python為例,帶你從零開始學習如何實現自動化任務,并通過一個實際案例展示其強大功能。 一、為什么選擇Pyt…

Spring Boot 與 MyBatis Plus 整合 KWDB 實現 JDBC 數據訪問

? 引言 本文主要介紹如何在 IDEA 中搭建一個使用 Maven 管理的 Spring Boot 應用項目工程&#xff0c;并結合在本地搭建的 KWDB 數據庫&#xff08;版本為&#xff1a;2.0.3&#xff09;來演示 Spring Boot 與 MyBatis Plus 的集成&#xff0c;以及對 KWDB 數據庫的數據操作…

Java鎖等待喚醒機制

在 Java 并發編程中&#xff0c;鎖的等待和喚醒機制至關重要&#xff0c;通常使用 wait()、notify() 和 notifyAll() 來實現線程間的協調。本文將詳細介紹這些方法的用法&#xff0c;并通過示例代碼加以說明。 1. wait()、notify() 與 notifyAll() 在 Java 中&#xff0c;Obj…

? UNIX網絡編程筆記:TCP客戶/服務器程序示例

服務器實例 有個著名的項目&#xff0c;tiny web&#xff0c;本項目將其改到windows下&#xff0c;并使用RAII重構&#xff0c;編寫過程中對于內存泄漏確實很頭疼&#xff0c;還沒寫完&#xff0c;后面會繼續更&#xff1a; #include <iostream> #include <vector&g…

AI Agent開發大全第四課-提示語工程:從簡單命令到AI對話的“魔法”公式

什么是提示語工程&#xff1f;一個讓AI“聽話”的秘密 如果你曾經嘗試過用ChatGPT或者其他大語言模型完成任務&#xff0c;那么你一定遇到過這樣的情況&#xff1a;明明你的問題是清晰的&#xff0c;但答案卻離題萬里&#xff1b;或者你認為自己提供的信息足夠詳盡&#xff0c…

系統架構設計知識體系總結

1.技術選型 1.什么是技術選型&#xff1f; 技術選型是指評估和選擇在項目或系統開發中使用的最合適的技術和工具的過程。這涉及考慮基于其能力、特性、與項目需求的兼容性、可擴展性、性能、維護和其他因素的各種可用選項。技術選型的目標是確定與項目目標相符合、能夠有效解…

基于3DMax與Vray引擎的輕量級室內場景渲染實踐

歡迎踏入3DMAX室內渲染的沉浸式學習之旅!在這個精心設計的實戰教程中,我們將攜手揭開3DMAX與Vray這對黃金搭檔在打造現實室內場景時的核心奧秘。無論您是渴望入門的3D新手,還是追求極致效果的專業設計師,這里都將為您呈現從場景藍圖構建到光影魔法施加的完整技術圖譜。我們…