Lua自己寫函數把時間戳(毫秒數)轉換為 “小時 : 分鍾” 的格式


之前在項目中遇到一個問題:有個字段上游返回給我的是類似 “28800000” 這樣格式的毫秒數,可是數據來源的UI界面上顯示的卻是類似 “9:00” 這樣的格式,為了格式統一,PM 要求我能不能把我這邊的格式轉換一下。

 

由於這個字段是個實時數據,它沒有跟數據庫的某個表或者某個字段對應,所以要轉的話只能用Lua腳本來進行轉換。

 

我一開始用了os.date()函數,很容易就轉換出來了。但是編譯的時候卻報錯,好像是說找不到os.date()這個函數,有點忘了,但是反正意思就是不能使用os.date()這個函數。我查的時候貌似看到說os.date()這個函數是個內置函數,為什么不能使用呢?

 

既然不能使用,那我就自己寫一個吧。反正也不難。

下面是我當時在代碼中寫的,反正功能是實現了,我已經加了注釋說明。我們需要轉換成的格式只是類似 “9:00” 這樣,沒有年月日和毫秒,如果需要,加上就行。如果寫的有欠缺的,歡迎指正。

 

-- timestampToDate() is an function that convert timestamp format like '28800000' to date format like '9:00'
function timestampToDate(x)
if x == nil or x == "" then    //先判斷要轉換的數據是否為空,如果為空,直接返回
  return x
end
local n = tonumber(x)  //把要轉換的數據先轉成數字類型,如果能轉成數字,就去做轉格式處理;否則直接返回
if n then
  hour = (n - n%(1000*60*60) )/(1000*60*60)  //小時。Java中的除法結果是整數部分,可以直接n/(1000*60*60)就行了,但是Lua的除法結果是保留小數的,所以需要先

                          進行n - n%(1000*60*60) ,再拿此結果去進行除法操作
  minmills = n% (1000 * 60 * 60)  //除去小時之后,還剩下的所有毫秒數
  min = (minmills - minmills%(1000*60))/(1000*60)  //分鍾。跟上面的小時的算法一樣
  if min < 10 then
    return hour..":0"..min  //分鍾數為 0 ~ 9 需要顯示為 01, 02, 03 ... , 09 所以需要在分鍾數前面拼接一個 0
  end
  return hour..":"..min  //分鍾數大於等於 10 時,不需要拼接 0 
else
  return x
end
end


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM