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

posted @ 2018-06-06 10:06  LisaJ  阅读(4473)  评论(0编辑  收藏  举报