用VBS獲取Unix時間戳的函數代碼

字號:


    VBS中沒有類似C標準庫中的time函數,怎么獲取Unix時間戳呢?乍一看很簡單:
    代碼如下:
    Function UnixTime()
    UnixTime = DateDiff("s", "01/01/1970 00:00:00", Now())
    End Function
    一個很想當然的方法,僅僅注意到了“1970年1月1日0時0分0秒”,而忽略了“協調世界時”。
    協調世界時,又稱世界標準時間或世界協調時間,簡稱UTC,從英文“Coordinated Universal Time”而來。在中國大陸的本地時間比UTC快8小時,就會寫作UTC+8。如果是在本地時間比UTC時間慢的地區(qū),例如夏威夷的時間是比UTC時間慢10小時,就會寫作UTC-10。
    而VBS中的Now()函數返回的時間是包括時區(qū)的,所以獲取Unix時間戳要做一些修正。
    代碼如下:
    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
    這才是正確的寫法。