Lua 基础 05 时间

Lua 基础相关知识 第五期(完结)

时间戳

通过 os.time 函数,可以获取当前的时间戳。

lua 复制代码
local time = os.time()
print(time)

-- 1717895996 -> 2024-06-09 09:19:56

如果要指定日期,获取对应的时间戳,可以往 os.time 函数传入一个表,设定日期。

lua 复制代码
local date = {
    year = 2024,  -- 年份
    month = 6,    -- 月份
    day = 9,      -- 天数
    hour = 9,     -- 小时
    min = 30,     -- 分钟
    sec = 30      -- 秒数
}
local time = os.time(date)
print(time)

-- 1717896630 -> 2024-06-09 09:30:30

注意到,如果只写了年份、月份、天数,没有小时、分钟、秒数,默认是当天中午 12 点。

lua 复制代码
local date = {
    year = 2024,  -- 年份
    month = 6,    -- 月份
    day = 9,      -- 天数
}
local time = os.time(date)
print(time)

-- 1717905600 -> 2024-06-09 12:00:00

日期

通过 os.date 函数,可以把时间戳转换成有格式的日期。

lua 复制代码
local time = os.time()
print(time)

-- 1717896843


local date = os.date("%Y/%m/%d %H:%M:%S", time)
print(date)

-- 2024/06/09 09:34:03

如果不带任何参数调用 os.date,则获取当前时间戳对应的默认日期格式。

lua 复制代码
local date = os.date()
print(date)

-- Sun Jun  9 09:35:58 2024

有时候,我们需要获取日期当中的某个参数,比如天数,可以把 os.date 的第一个参数改成 "*t",此时它会返回一个表。

lua 复制代码
local time = os.time()
print(time)

-- 1717897482


local dateTable = os.date("*t", time)
print(dateTable)

-- table: 000001736C002770


for key, value in pairs(dateTable) do
    print(key, value)
end

-- year    2024
-- wday    1
-- day     9
-- min     44
-- month   6
-- sec     42
-- isdst   false
-- yday    161
-- hour    9

如果要计算多少天后的日期,可以给这个日期表中的 day 字段加上一定的天数,转成时间戳后,再格式化日期。

lua 复制代码
-- 获取当前时间戳
local time = os.time()
-- 转换成日期格式
local currentDate = os.date("%Y/%m/%d %H:%M:%S", time)
print(currentDate)

-- 2024/06/09 09:51:20


-- 把当前时间戳转成一个表,天数加上 100 天
local dateTable = os.date("*t", time)
dateTable.day = dateTable.day + 100


-- 获取 100 天后的时间戳
local future = os.time(dateTable)
-- 转换成日期格式
local futureDate = os.date("%Y/%m/%d %H:%M:%S", future)

print(futureDate)

-- 2024/09/17 09:51:20

时间差

通过 os.difftime 函数,计算两个时间戳之间的差值。

例如,计算一下当前时间到次日零点的秒数。

lua 复制代码
-- 获取当前时间戳
local now = os.time()
print(os.date("%Y/%m/%d %H:%M:%S", now))

-- 2024/06/09 10:12:39


-- 把当前时间戳转成一个表,天数加 1,小时、分钟、秒数清零
local nowDate = os.date("*t", now)
nowDate.day = nowDate.day + 1
nowDate.hour = 0
nowDate.min = 0
nowDate.sec = 0


-- 计算次日零点时间戳
local future = os.time(nowDate)
print(os.date("%Y/%m/%d %H:%M:%S", future))

-- 2024/06/10 00:00:00


-- 计算两个时间戳的差值
local diff = os.difftime(now, future)
print(diff)

-- -49641.0

CPU 时间

通过 os.clock 函数,可以获取消耗的 CPU 时间,可以用在性能测试。

例如,计算一下 for 循环累加 1 亿次消耗的时间。

lua 复制代码
-- 开始前
local before = os.clock()
print(before)  -- 0.081

-- 累加 1 亿次
local sum = 0
for i = 1, 100000000 do
    sum = sum + i
end

-- 结束后
local after = os.clock()
print(after)   -- 0.445

-- 经过的时间
local diff = after - before
print(diff)    -- 0.364
相关推荐
爱学测试的雨果1 天前
Postman —— postman实现参数化
软件测试·功能测试·测试工具·lua·postman
老狼孩111226 天前
全分辨率免ROOT懒人精灵-自动化编程思维-设计思路-实战训练
运维·自动化·lua·脚本开发·懒人精灵·全分辨率免root
数据知道6 天前
【Lua】一文快速掌握 Lua 语言指令(Lua 备忘清单)
开发语言·junit·lua
非衣居士6 天前
Lua程序设计笔记
lua·游戏开发
Winston-Tao8 天前
Skynet 中 snlua 服务启动整体流程分析
lua·游戏开发·c 语言·skynet·游戏服务器框架
发财哥fdy9 天前
3.24-3 接口测试断言
开发语言·lua
ZZDICT9 天前
OpenResty(Lua)+Redis实现动态封禁IP
redis·nginx·lua·openresty
monstercl9 天前
skynet网络包库(lua-netpack.c)的作用解析
c语言·网络·lua·skynet·游戏服务器
胖大和尚10 天前
Lua 的 Neovim 常用配置
开发语言·lua
老狼孩1112211 天前
2025新版懒人精灵零基础安装调试+lua基础+UI设计交互+常用方法封装+项目实战+项目打包安装板块-视频教程(初学者必修课)
android·开发语言·自动化测试·lua·脚本开发·懒人精灵·免root