年月日时间和64位时间的使用及相互转换
?通常在我們的程序中,需要使用到年月日類型的時間,也需要使用64位整型的時間,比如存儲到數據庫中(數據庫中對應的時間字段的類型則為big int數據類型)。代碼中會涉及到如何獲取當前時間,以及年月日時間和64位時間之間的轉換問題。下面就自己遇到的實際情況,做一個小的總結。
1、獲取當前時間
??????? 獲取當前時間的時間有多種,下面說說使用time函數,使用CTime類和使用SYSTEMTIME結構體這三種常見的獲取當前時間的方法。
(1)使用time函數獲取當前時間
??????? 使用該函數的時候應該包含time.h頭文件,使用該函數獲取當前的64位時間最為簡單。
[cpp]? view plain copy
(i)在客戶端的一個線程中,一方面要定時地給服務器發送心跳包數據(假如每隔10秒),另一方面又要進行其他的數據收發工作,而這些數據又要實時的的收發,所以在該線程中不能等待10秒鐘后發送心跳包,然后再收發其他的數據,這個時候我們就可以定義一個__time64_t類型的時間變量,記錄最后一次發送心跳包的時間,這樣在線程函數的循環中,每次循環只需要等待一個微小的時間就進入下一次循環,在實時收發數據的同時判斷當前時間離最后一次發心跳包的時間間隔是否已經到達10秒,若到達則發送新的心跳包,并更新最后一次心跳包發送的時間。
(ii)在視頻監控系統中,有計劃錄像的概念,那錄像的計劃是如何實現的呢?是如何進行調度的呢?這里就簡要的說明一下,開啟一個錄像調度的線程,在該線程中遍歷錄像對象列表,對象中包含錄像計劃的開始時間和結束時間,當當前時間大于或等于開始錄像時間時,就開始錄像,當當前時間大于或等于結束錄像時間時,就結束錄像。
(2)使用CTime類獲取當前時間
?????? ? 由于該方法使用到CTime MFC類,所以只能用在MFC的工程中。首先定義一個CTime類對象,然后調CTime::GetCurrentTime()獲取當前時間,最后利用GetYear( ),GetMonth( ),GetDay( ),GetHour( ),GetMinute( )和GetSecond( )等函數得到具體的年月日時分秒信息。
[cpp]? view plain copy
(3)使用SYSTEMTIME結構體獲取當前時間????????
??????? 與CTime類處理的類似,先定義一個結構體對象,然后調用GetLocalTime函數來獲取當前時間,結構體對象的成員中則包含有年月日信息。與CTime類不同的是,該方法可以用在MFC工程中,也可以用在Win32工程中。
[cpp]? view plain copy
????
2、年月日時間和64位時間的相互轉化
??????? 64位時間保存到數據庫是很方便的,之前也有很多人問過如何將年月日時間保存到數據庫中,我覺得將他們轉化為64位時間后在保存到數據庫中比較好,數據庫中只要有一個big int時間字段就可以了,這樣不僅簡化了時間的保存方法,還有利于數據表的排序查詢。界面中數據要保存到數據庫中,要將之轉化為64為時間;從數據庫中讀出64為時間,要將之轉化為年月日時間在界面上顯示出來。
(1)使用CTime類實現年月日時間和64位時間的相互轉化
(i)年月日時間轉化為64位時間:
??????? 構造CTime類對象時,將年月日信息作為構造參數。
[cpp]? view plain copy (ii)64位時間轉化為年月日時間:?
??????? 構造CTime類對象時,將64位時間作為構造參數。
[cpp]? view plain copy (2)使用tm結構體實現年月日時間和64位時間的相互轉化
??????? tm結構體的定義如下所示:
[cpp]? view plain copy
(i)年月日時間轉化為64位時間:?
??????? 首先使用SYSTEMTIME結構體來獲取當前的時間,然后利用tm結構體將獲得年月日時間轉化為64位時間。
[cpp]? view plain copy
(ii)64位時間轉化為年月日時間:?
??????? 首先將64位時間轉化為tm結構體時間,然后再轉化成年月日時間。
[cpp]? view plain copy總結
以上是生活随笔為你收集整理的年月日时间和64位时间的使用及相互转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 迁移学习和finetune的区别及迁移学
- 下一篇: 精通 Python OpenCV4:第二