VBS中沒(méi)有類似C標(biāo)準(zhǔn)庫(kù)中的time函數(shù),怎么獲取Unix時(shí)間戳呢?乍一看很簡(jiǎn)單:
代碼如下:
Function UnixTime()
UnixTime = DateDiff("s", "01/01/1970 00:00:00", Now())
End Function
一個(gè)很想當(dāng)然的方法,僅僅注意到了“1970年1月1日0時(shí)0分0秒”,而忽略了“協(xié)調(diào)世界時(shí)”。
協(xié)調(diào)世界時(shí),又稱世界標(biāo)準(zhǔn)時(shí)間或世界協(xié)調(diào)時(shí)間,簡(jiǎn)稱UTC,從英文“Coordinated Universal Time”而來(lái)。在中國(guó)大陸的本地時(shí)間比UTC快8小時(shí),就會(huì)寫作UTC+8。如果是在本地時(shí)間比UTC時(shí)間慢的地區(qū),例如夏威夷的時(shí)間是比UTC時(shí)間慢10小時(shí),就會(huì)寫作UTC-10。
而VBS中的Now()函數(shù)返回的時(shí)間是包括時(shí)區(qū)的,所以獲取Unix時(shí)間戳要做一些修正。
代碼如下:
Function UnixTime()
Set objWMIService = _
GetObject("winmgmts:\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem",,48)
For Each objItem in colItems
TimeZone = objItem.CurrentTimeZone
Next
UnixTime = DateDiff("s", "01/01/1970 00:00:00", Now())
UnixTime = UnixTime - TimeZone * 60
End Function
這才是正確的寫法。