LabVIEW深入探索之絕對時間、通用時間和相對時間
作為一種面向工程應用的編程語言,Labview提供了非常豐富的時間操作函數。8.X后又提出了新的有關時間的數據類型,時間標識(TIMESTAMP)。時間標識早期通常翻譯成“時間戳”,實際上是一種改進型的數值控件,從時間標識控件所在的控件選板就可以初步判斷出,時間標識就是特殊的數值控件。

一、時間標識的內存映射
要想真正了解一種數據類型,首要的問題是要搞清楚該數據類型在內存中或者文件中是如何存儲的。我們知道數值型控件可以選擇控件所包含的數據類型,比如雙精度浮點數、整型數、32位整型數、16位整型數等等。
時間標識控件是不允許選擇它所包含的數據類型的,這說明時間標識所包含的數據類型是固定的。從幫助文件中,我們可以找到時間標識在內存中的存儲方式--映射。
LabVIEW將時間標識保存為一個含四個整數的簇,其中前兩個帶符號整數(64位二進制)表示自1904年1月1日周五凌晨[01-01-190400:00:00]以來無時區影響的所有秒數。后兩個不帶符號整數(64位二進制)表示小數秒部分。

LabVIEW利用16個字節(128位)表示時間信息,其中前8個字節(64位)由兩個I32構成,表示從0時刻開始經歷過的秒數。后面8個字節為U64數據,表示秒的小數部分。
二、時間標識與雙精度數之間的相互轉換
在時間標識出現以前,經常用雙精度數表示從0時刻經歷過的秒數。我們知道雙精度數所占的內存空間也是8個字節,與時間標識相同。但是時間標識實際上是定點數,它的小數點位置是確定的,因此實際上雙精度數表示時間與時間標識相比,不如時間標識精確。
采用數值轉換函數就可以實現時間標識和雙精度數之間的相互轉換,如下圖所示:

三、強制轉換時間標識至數值
既然我們已經知道了時間標識在內存中的存儲方式,我們自然就可以通過強制轉換函數分解出時間標識的兩個組成部分,秒和秒的小數部分。
因為時間標識占有8個字節的內存空間,并分成前后各4個字節,因此可以創建一個簇或者數組來表示它,下面的例子創建一個簇,包含3個元素。前兩個元素表示秒的整數部分,第3個元素表示秒的小數部分。

評論