我能用 os.date 将秒数转换为时间格式吗?

我需要一个简单的函数将秒数转换为人类可读的时间字符串,用于表示倒计时。我可以通过非常直观的数学计算获得所需的结果,但这并不够优雅。

然后我注意到有一个名为 os.date 的函数,但我无法得到想要的结果,我的调用有什么问题,这是我的代码:

#!usr/bin/env lua

local function getDate1(sec)
    local days = math.floor(sec / 86400)
    local hours = math.floor((sec % 86400) / 3600)
    local minutes = math.floor((sec % 3600) / 60)
    local seconds = math.floor(sec % 60)
    return days, hours, minutes, seconds
end

local function getDate2(sec)
    local date = os.date("*t", sec)
    return date["day"], date["hour"], date["min"], date["sec"]
end

local function printDate(d, h, m, s)
    print(string.format("%02d %02d:%02d:%02d", d, h, m, s))
end

function main()
    printDate(getDate1(999999))
    printDate(getDate2(999999))
end

main()

11 13:46:39

12 21:46:39

点赞
用户1847592
用户1847592
本地函数 `getDate2(sec)`:获取日期时间

参数:
- `sec`:必选参数,整数型,表示秒数

返回值:
- `day`:整数型,表示秒数所对应的日期是当月的第几天,从0开始计数
- `hour`:整数型,表示秒数所对应的日期是当天的几点
- `min`:整数型,表示秒数所对应的日期是当天的几分
- `sec`:整数型,表示秒数所对应的日期是当天的几秒

注解:
- `os.date("!*t", sec)`:将秒数转化为一个时间表,其中符号"!"表示将时间转化为协调世界时(UTC)
- `date["day"]-1`:由于返回的日期从0开始计数,因此需要减1得到第几天
2019-08-04 06:36:09