lua 中關於時間戳和可讀時間格式的一點記錄

lua 標準庫中提供了關於時間的函數os.time()和os.date(),這兩個函數使用起來仍是有須要注意的地方的;這兩個函數的結果都是加入了時區;好比我如今系統是GMT+8; os.time({year=1970, month=1, day=1, hour=0})計算出來的是-28800,也就是86060;計算的是當前table中給定的時間距離1970.1.1 08:00時間的秒數,因此就獲得負數了;服務器

C標準庫中,time()函數獲得的時間戳其實也是加入了時區,也就是說無論你係統是那個時區,該函數返回的都是距離1970.1.1 00:00到當前的秒數;好比如今是GMT+8 00:00, 那麼GMT+9 就是01:00,在這兩個 時區同時調用time()函數,獲得的值是同樣的;函數

時區只會影響到咱們轉換過來的可讀樣式,好比os.date()函數,os.date("*t", 0)的結果在不一樣的時區hour字段的值會不同,世界標準時間以GMT+0爲參照,北京時間以GMT+8爲參照,中間有8個小時的差距;lua

寫這個記錄,主要是最近寫了個遊戲活動開啓的功能, 服務器告訴客服端活動的開啓和結束時間(時間戳),好比09:00- 12:00;而後客戶端要轉換成可讀樣式,這裏就要考慮到時區了,由於os.date()是在本地計算的,若是沒注意直接轉換過去就會獲得本地的時間顯示出來;因此若是服務器給的是時間戳的話,這個還真得多注意下。之前寫代碼都好少涉及到本地轉換可讀格式的,此次遇到了記錄下,算是方便增強下記憶……遊戲

隨便說下:os.date("*t", 0)獲取到的table中hour字段是否能夠當作當前時區呢?也就是說是否已經過該方式獲取當前系統的時區;本身也不肯定,打個問號吧table

相關文章
相關標籤/搜索