LABVIEW的編程技巧之如何比較系統(tǒng)時(shí)間
掃描二維碼
隨時(shí)隨地手機(jī)看文章
日前在論壇上看到網(wǎng)友的一個(gè)帖子,內(nèi)容是比較當(dāng)前時(shí)間是否在22:00:00和05:00:00之間,從字面上看 05:00:00應(yīng)該是第二天凌晨。網(wǎng)友的比較方法是把時(shí)間上下限和當(dāng)前時(shí)間轉(zhuǎn)換為字符串,然后進(jìn)行比較,下面是他的程序框圖,因?yàn)樵谶壿嬌洗嬖趩?wèn)題,所以引起了熱烈的討論。
獲取系統(tǒng)時(shí)間使得時(shí)間在22:00:00之后到5:00:00之前燈亮,但是其他時(shí)間都對(duì)的,為什么在0:00:00~2:00:00之間就不對(duì)呢?
似乎是4:59:59那里的冒號(hào)是使用了中文輸入法的冒號(hào),而那個(gè)節(jié)點(diǎn)輸出的時(shí)候是使用英文輸入法下的冒號(hào)的,所以比較時(shí)就出錯(cuò)了。
不是的,那個(gè)只要時(shí)間小于2比如說(shuō)1:10:50,因?yàn)樗牡谝粋€(gè)數(shù)字比2小,輸出就不對(duì)
后面還有一些相關(guān)的回復(fù)就不摘錄了,討論到后來(lái)一位網(wǎng)友提出了意見(jiàn)“感覺(jué)這個(gè)思路不是很好”
我個(gè)人認(rèn)為這位網(wǎng)友的看法是對(duì)的,我們知道字符串是逐個(gè)字符比較的,它實(shí)際上比較的是字符的ASCII值。“5”和“22”進(jìn)行字符串比較,那么5>22,因?yàn)?>2,這對(duì)數(shù)字比較來(lái)說(shuō)是不符合邏輯的。
LV中的時(shí)間本身是數(shù)值,任何編程語(yǔ)言都會(huì)定義一個(gè)0時(shí)刻,當(dāng)前時(shí)間為從那個(gè)0時(shí)刻開(kāi)始后經(jīng)過(guò)的秒數(shù)。LV作為面向工程實(shí)踐的編程語(yǔ)言,有關(guān)時(shí)間操作函數(shù)非常豐富,因此使用“數(shù)值”比較更容易理解、不容易發(fā)生錯(cuò)誤。
我們知道,目前LV有三種不同的方式表示時(shí)間,三者之間可以自由轉(zhuǎn)換:
1、直接利用秒,自0時(shí)刻開(kāi)始經(jīng)歷過(guò)的秒數(shù)。
上圖所示的就是LV定義的0時(shí)刻時(shí)間,這個(gè)時(shí)間是時(shí)區(qū)相關(guān)的。
2、時(shí)間標(biāo)識(shí)符,時(shí)間標(biāo)識(shí)符可能是在LV8.0之后才出現(xiàn)的,是LV專門為時(shí)間操作提供的新的控件,如上圖所示。其時(shí)間精度比直接使用秒數(shù)要高。
3、時(shí)間簇表示。時(shí)間簇表示是我們最為常用的時(shí)間表示法,簇的數(shù)據(jù)結(jié)構(gòu)如下圖所示:
回過(guò)頭來(lái)看看網(wǎng)友所提的問(wèn)題,他的目的是要看看當(dāng)前系統(tǒng)時(shí)間是否在上上下限范圍之內(nèi)。當(dāng)前系統(tǒng)時(shí)間很容易獲得,問(wèn)題是如何獲取上下限的問(wèn)題??纯聪旅娴某绦蚩驁D。
上面的程序框圖中,有兩個(gè)重要的技巧,如紅色箭頭所示。
1、年、月、日、小時(shí)可以是相對(duì)時(shí)間,沒(méi)有限制,我們不用考慮24小時(shí),31天等等,LV會(huì)自動(dòng)進(jìn)行轉(zhuǎn)換。上圖中22+7=29,超過(guò)24小時(shí)后,LV自動(dòng)調(diào)整天數(shù)。
2、判斷范圍并強(qiáng)制轉(zhuǎn)換函數(shù)可以直接使用時(shí)間標(biāo)識(shí)符作為輸入?yún)?shù)。
我們知道,時(shí)間標(biāo)識(shí)符可以直接轉(zhuǎn)換為秒數(shù),更為重要的是時(shí)間標(biāo)識(shí)符可以直接和數(shù)值進(jìn)行加減運(yùn)算,沒(méi)有數(shù)值單位時(shí)默認(rèn)為秒,因此上面的程序框圖可以簡(jiǎn)化為:
我曾經(jīng)介紹過(guò)時(shí)間標(biāo)識(shí)符可以直接攜帶單位進(jìn)行加減運(yùn)算,因此上述程序框圖可以簡(jiǎn)化為:
注意紅色箭頭部分,h表示小時(shí),這樣就不需要乘以3600,轉(zhuǎn)換為秒了,對(duì)于時(shí)間比較非常方便。