1. 程式人生 > >Windows中的時間(SYSTEMTIME和FILETIME)

Windows中的時間(SYSTEMTIME和FILETIME)

    上一篇中介紹了C執行庫中的時間處理函式。這一篇介紹Windows SDk中提供的時間函式。兩種時間系統之間沒有本質區別(事實上CRT時間是用Windows時間實現的,當然這是說的VC實現),同樣提供本地時間和UTC時間之間的轉換。不過CRT中的tm時間在SDK中對應為系統時間(SYSTEMTIME),CRT中的time_t時間在SDK中對應的為檔案時間(FILETIME),那個"特殊時刻"也變成1601年1月1日的子夜。

    當然,首先要弄清楚FILETIME與SYSTEMTIME定義。

   

    比較一下,很明顯,FILETIME與time_t類似,是64位整型,不過FILETIME是以100納秒(ns)為單位。SYSTEMTIME與tm類似,不過多了一項wMilliseconds。可以看出,SDK時間比CRT的時間提供了更高的精度。同時SDK提供了更豐富的函式來處理時間。

   

    這兩個函式獲得SYSTEMTIME形式的當前時間,不過GetSystemTime函式獲得當前的UTC時間,GetLocalTime獲得當前的本地時間,可以想象,獲得的兩個時間存在著時差。類似於CRT中提供tm與time_t之間的轉換,SDK也提供了兩個函式來轉換SYSTEMTIME時間與FILETIME時間。

   

    函式命名很self-explanatory,就不用多說了吧。

    SDK還提供了兩個很有趣的函式。

   

    LocalFileTimeToFileTime函式將本地的FILETIME時間轉換為對應的UTC的FILETIME時間。我覺得,這個函式只是通過將本地時間減去與UTC時間的時間差來實現轉換,比如在東八區的本地時間轉換為對應的UTC時間,只需要將本地時間減去8*60*60*1000*1000*10(單位100ns)。類似,FileTimeToLocalFileTime函式是將UTC時間轉換為本地時間,它只是將減去時間差換成加上時間差。

    瞭解了這些功能,讓我們用程式碼說話吧。

   

    程式輸出結果如下:

    程式輸出結果

    程式碼13行GetLocalTime函式獲得當前的本地SYSTEMTIME時間,14行獲得對應的UTC的SYSTEMTIME時間,如輸出結果前兩行所顯示,兩者相差8小時(凌晨還在寫部落格,表揚下自己。。。)。

    20行SystemTimeToFileTime函式將本地SYSTEMTIME時間轉換為方便計算的本地FILETIME形式時間,如輸出結果第三行所顯示。

    25行LocalFileTimeToFileTime函式將本地FileTime時間轉換為對應的UTC的FILETIME時間,如輸出結果第四行所顯示。就像前面介紹的,如果你將輸出結果第三,四兩行所顯示的數字相減,併除以10*1000*1000*60*60,你將會得出8,你可以算下試試,記住FILETIME是以100納秒為單位的。

    最後30行FileTimeToSystemTime將FILETIME時間轉換為SYSTEMTIME時間。可以看出輸出結果中第五行與第二行相同,這是必須的,因為兩者都是當前本地時間對應的UTC時間。

相關推薦

Windows時間(SYSTEMTIMEFILETIME)

    上一篇中介紹了C執行庫中的時間處理函式。這一篇介紹Windows SDk中提供的時間函式。兩種時間系統之間沒有本質區別(事實上CRT時間是用Windows時間實現的,當然這是說的VC實現),同樣提供本地時間和UTC時間之間的轉換。不過CRT中的tm時間在SDK中對應

Windows時間(SYSTEMTIMEFILETIME)&CRT時間(time_ttm)

時間處理時實際專案中經常碰到的問題,這裡介紹最常用的時間處理函式。 首先介紹基本的時間概念。時間一般分為兩種,一種是本地時間(Local Time),一種是協調世界時間(Coordinated Universal Time ,UTC),也就是傳說中的格林威治時間。本地

Windows句柄ID的區別

程序員 之間 spa nload 資源 das 語句 導致 arr VC++菜單的句柄也可以理解成菜單的識別符(ID). 但如果指菜單項的ID, 那可能又是一回事了。按我的理解: 1. 句柄是程序運行中系統為其分配的,菜單項ID是編程者自己定義指定的。一般可在資源文件中定

python3使用ctypes在windows訪問CC++動態連結庫函式示例

python3使用ctypes在windows中訪問C和C++動態連結庫函式示例 這是我們的第一個示例,我們儘量簡單,不傳參,不返回,不訪問其他的動態連結庫 一 測試環境介紹和準備 測試環境: 作業系統:windows10 Python版本:3.7.0 VS版本:vs2015社群版(免費) 相關

python3使用ctypes在windows訪問CC++動態鏈接庫函數示例

mage linu href types windows 文件 function 動態鏈接 就是 python3使用ctypes在windows中訪問C和C++動態鏈接庫函數示例這是我們的第一個示例,我們盡量簡單,不傳參,不返回,不訪問其他的動態鏈接庫一 測試環境介紹和準備

Java儲存資料庫時間php操作資料庫時間戳的關係

一直困擾我的問題,終於得到了解決!原先以為是自己系統問題(其實也可以確定自己的系統是64位),於是利用一下程式碼測試自己的系統是不是有問題,得到的結果是沒問題的,但是就是無正確結果輸出。於是解決問題途徑是在strtotime()函式和date(format,time())函式之間徘徊。

Windows的使用者

目錄 使用者帳戶 組賬戶 內建組賬戶 使用者帳戶是對計算機使用者身份的標識,本地使用者帳戶、密碼存在本地計算機上,只對本機有效,儲存在本地安全帳戶資料庫 SAM 中,檔案路徑:C:\Windows\System32\config\SAM ,對應的程

windows虛擬機器windows之間互通性,並實現上傳檔案

一 測試連結是否ping通 筆記文件見百度網盤:大資料資料/windows與上安裝虛擬機器....doc; 因為安裝虛擬機器的時候,windows和vmare選擇的通訊方式為NAT方式,現在測試是否能ping通 虛擬機器的ip:192.168.59.128 Windo

windows部署SNATDNAT

部署環境: 伺服器的作業系統:Windows Server 2008 R2 Standard 64bit 這兩臺服務為防止配置中防火牆的影響都關閉防火牆 NAT伺服器: 網絡卡 內網IP 外網IP 網絡卡1 192.168

Windows安裝zookeeperkafka單點環境

1.首先需要先安裝zookeeper 在windows下安裝單點測試 a.下載zookeeper-3.4.9.tar.gz,解壓在conf\下把zoo_sample.cfg 複製為zoo.cfg

JQ 時間格式化 時間的比較

//格式化時間Date.prototype.formatDate = function (fmt) {   var o = {       "M+": this.getMonth() + 1, //月份        "d+": this.getDate(), //日  

windows的程序執行緒

 在討論windows下的程序和執行緒時,我們先回顧下通用作業系統的程序和執行緒。之所以稱之為通用是因為一貫的本科或者其他教材都是這麼說的: 1、程序是系統分配資源的最小單位。 2、執行緒是處理器排程的最小單位。 3、一個程序可以包含很多執行緒,且這些執行緒共享程序內的

MyBatis的mapper.xml時間比較like的使用

一、MyBatis查詢MySQL的時間段         以下語句用於查詢中時間的比較,#{startTime}=<a.latestTime<=#{endTime},時間格式可以自定義,這是使用的是“年-月-日” <iftest="startT

qt時間時間的轉換

另外再說一點,上次在做專案時我們並不會輸入2014年12月19日10:24:40這樣的格式,因為太繁瑣了,測試需要很多次,每次都輸入這樣的格式太麻煩了,一般會輸入20141219102440這樣的格式,那麼就需要字串的拆分,因為程式是Qt的環境下,所以使用了mid(),C++下可以使用substr(),這兩個

PHP時間時區

根據 utc ack 國際 同時 back mda class 使用 時間戳 時間戳是指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現在的總秒數。 時區 由於世界各國家與地區經度不同,地方時也有所不

windows控制臺窗口普通窗口有什麽區別?

都是 adc 同時 寫到 一個 數據 tdi 消息隊列 循環 1. 窗口都是windows標準窗口,有窗口句柄,但是console window沒有消息循環,直接從緩沖區讀數據,顯示數據。 windows中普通窗口都有自己的窗口過程, 我可以使用SetWin

MySQL基於mysqldump二進制日誌log-bin二進制日誌進行邏輯備份以及基於時間點的還原

總結 mysql-bin lin .sql bin -h eat log-bin 之前 本文出處:http://www.cnblogs.com/wy123/p/6956464.html 本文僅模擬使用mysqldump和log-bin二進制日誌進行簡單

c/c++時間函數隨機函數的總結

type years errno tween rom 循環語句 see cpu linux時間 c/c++中時間函數和隨機函數的總結 *******************C++的隨機函數和時間函數************ 隨機函數 一、C++中不能使用rand

【Python】LinuxWindowspython的差異

() 問題 選項 警告 gpo lin 私有屬性 調試 bsp 慢慢寫... --------------------------------------------------------------------------------------------------

Windows 通過Python實現ping命令加時間

Windows Python ping 由於ping命令在ping的時候無法加入時間,不能夠直觀分析結果。便想在ping的時候加入時間戳。 1.首先需要系統配置了Python的環境,我的環境如下,這裏就不介紹環境搭建步驟。 2.以下是代碼展示,新建一個ping.py文件im