06.OS操作系统库
一. 时间函数
1. os.time([table])
--[=[ os.time([table]) 语法: os.time([table]) 功能: 获取当前系统日期的时间戳 参数: 参数table(可选): 获取指定日期的时间戳 {year = 2022, month = 1, day = 1, hour = 8, min = 0, sec = 0} 返回值: 整数型, 返回1970/1/1 08:00:00到当前系统日期或指定日期的时间戳 --]=] --获取当前系统时间戳 print(os.time()) --获取指定日期的时间戳,必须是在 1970-01-01 08:00:00 之后才能获取到时间戳,否则返回 nil --在获取指定日期的时间戳的时候,除非我们能确保指定日期是在 1970-01-01 08:00:00 之后,否则必须进行判空处理 --当你参数table值只填写年月日时,Lua默认hour = 12, min = 0, sec = 0 print(os.time({year = 1970, month = 1, day = 1, hour = 7, min = 0, sec = 0})) --输出结果: nil print(os.time({year = 1970, month = 1, day = 1, hour = 8, min = 0, sec = 0})) --输出结果: 0 print(os.time({year = 2022, month = 10, day = 25, hour = 11, min = 23, sec = 18})) --输出结果: 1666668198
2. os.date()
--[=[ os.date([format[,time]]) 语法: os.date([format[,time]]) 功能: 根据时间戳, 按照格式输出时间 参数: 参数format(可选): 格式, 省略默认为"%c" 参数time(可选): 时间戳, 省略默认为当前时间 返回值: 字符串型, 返回按照指定格式输出的时间 --]=] --按照格式输出当前系统时间, format省略默认为"%c", time省略默认为当前系统时间 print(os.date()) --输出结果: 10/28/22 11:39:28 --根据指定格式输出当前系统时间 print(os.date("%Y-%m-%d %H:%M:%S")) --输出结果: 2022-10-28 11:39:28 --参数format为"*t", 则输出一个表 local t = os.date("*t") for k,v in pairs(t) do print(k,v) end --格兰尼治时间, 输出正0区的当前时间"!*t" local t = os.date("!*t") for k,v in pairs(t) do print(k,v) end print( os.date("!%c") )
3. os.difftime()
--[=[ os.difftime (t2, t1) 语法: os.difftime (t1, t2) 功能: 根据时间戳, 按照格式输出时间 参数: 参数t1(必选): 第一个时间戳 参数t2(必选): 第二个时间戳 返回值: 返回以秒计算的时刻 t1 到 t2 的差值(t1 - t2) --]=]
4. os.clock()
--[=[ os.clock(t2, t1) 语法: os.clock(t1, t2) 功能: 返回程序使用的按秒计 CPU 时间的近似值 参数: 无 返回值: 返回程序使用的按秒计 CPU 时间的近似值 --]=] print(os.clock() * 1000) -- 乘以1000为毫秒
5. os.remove()
--[[ local ret, err, errcode = os.remove ([filename]) 语法: local ret, err, errcode = os.remove ([filename]) 译文: local 返回值, 错误信息, 错误码 = os.remove ([文件名或空目录]) 功能: 删除文件或一个空目录(在POSIX 系统上可以是一个"空"目录),若函数调用失败则返回nil加上错误信息和错误码 参数: 参数filename: 文件名或目录 返回值: 删除成功返回true, 删除失败返回nil和错误信息和错误码 --]] print(os.remove("C:/null/test.txt"))
6. os.rename()
--[[ local ret, err, errcode = os.rename (oldname, newname) 语法: local ret, err, errcode = os.rename (oldname, newname) 译文: local 返回值, 错误信息, 错误码 = os.rename (原目录, 先目录) 功能: 文件重命名(可以改变文件的路径,但文件目录必须存在,且文件目录中不存在相同的文件名) 参数: 参数oldname:原路径 参数newname:新路径 返回值: 修改文件名成功返回true, 修改文件名失败返回nil和错误信息和错误码 --]] print(os.rename("C:/test01.txt", "C:/test/test03.txt"))
7. os.exit
--[=[ Statuscode = os.exit([code[, close]]) 语法: Statuscode = os.exit([code[, close]]) 译文: 状态码 = os.exit([code[, close]]) 功能: 终止宿主程序 参数: 参数code(可选): (code就是一个返回值, 操作成功后返回的值) 如果参数为treu则关闭成功后返回状态码"EXIT_SUCCESS"(默认) 如果参数为false则关闭成功后返回状态码"EXIT_FAILURE" 如果参数为一个数字则关闭成功后返回状态码就是这个数字 参数close(可选): 可选参数close为真,在退出前关闭 Lua 状态机 返回值: 设置成功, 返回文件句柄(file), 设置失败, 则直接报错 1. 设置文件名, 在没有找到文件名的情况下会报错 2. 在设置已关闭的文件句柄下会报错 --]=] print(os.exit(true,true)) --不会执行输出命令, 因为执行os.exit()函数本程序就关闭了
8. os.getenv
--[=[ path = os.getenv (varname) 语法: path = os.getenv (varname) 译文: 环境变量的路径 = os.getenv (环境变量的名称) 功能: 获取计算机中存在的环境变量(右键计算机, 属性, 高级设置, 所有的环境变量都在这里设置) 参数: 参数varname(必选): 环境变量的名称在(右键计算机, 属性, 高级设置,环境变量)中查看 返回值: 如果存在环境变量则返回环境变量的值, 如果没有该环境变量返回nil --]=] print(os.getenv("path"))
9. os.execute
--[=[ ret = os.execute ([command]) 语法: ret = os.execute ([command]) 译文: 运行系统命令后返回的值 = os.execute ([系统命令]) 功能: 运行系统命令(每一个系统不一定存在要运行的命令), 他调用的是系统中的cmd解释器进行运行 参数和返回值: 参数command(可选): 如果系统中存在cmd解释器则就返回一个值"true" 如果填写系统命令, 则命令成功运行完毕, 则返回值返回"true"、exit、命令的退出状态码。否则返回nil 命令被打断, 则返回值返回 nil、signal、打断该命令的信号码 "exit": 命令正常结束; 接下来的数字是命令的退出状态码。 "signal": 命令被信号打断; 接下来的数字是打断该命令的信号。 --]=] --判断系统中是否存在cmd解释器 print(os.execute())--输出结果: true否则返回nil --按任意键继续... os.execute("pause")
10. os.tmpname
--[=[ filename = os.tmpname () 语法: filename = os.tmpname () 译文: 文件名 = os.tmpname () 功能: 返回一个可用于临时文件的文件名(没有后缀), 这个文件在使用前必须显式打开,不再使用时需要显式删除 参数: 无 返回值: 返回一个可用于临时文件的文件名(没有后缀), 这个文件在使用前必须显式打开,不再使用时需要显式删除 --]=] print(os.tmpname())--输出结果: \s6c4. (此结果是随机的) --必须使用简单模式显式打开和显式删除 local filename = os.tmpname() .. "txt" io.output(filename) io.write("123456789") io.close() io.input(filename) print( io.read() ) io.close(io.input())
11. 算法实战
--日期转时间戳 --情况1: 2022年10月26日15:23:53 --情况2: 2022/10/26 15:23:53 --情况3: 2022-10-26 15:23:53 local function dateToTime(date) local tbl = {string.match(date, "^(%d%d%d%d)[\229%-%/]\185?\180?([0-1]?[0-9])[\230%/%-]\156?\136?([0-3]?[0-9])[ \230]?\151?\165? ?(%d?%d):(%d?%d):(%d?%d)$")} if not tbl[1] then return nil end return os.time({year = tbl[1], month = tbl[2], day = tbl[3], hour = tbl[4], min = tbl[5], sec = tbl[6]}) end print( "时间戳:",dateToTime("2022/10/26 15:23:53")) --获取截止到今日00:00:00的时间戳 math.randomseed(os.time()) local function GetZeroTimeStamp() local tab = os.date("*t") tab.hour = 0; tab.min = 0; tab.sec = 0 return os.time(tab) end --获取指定距离天数的随机时间 local function GetMorrowRandomTime(day) day = day or 1 local MorrowTimeStamp = GetZeroTimeStamp() + 86400 * day return os.date("%c",math.random(MorrowTimeStamp ,MorrowTimeStamp + 86400) ) end --编写一个使用字符串日期计算时间差的 --字符串日期转时间戳 local function dateToTime(date) local tbl = {"year", "month", "day", "hour", "min", "sec"} local t, i = {}, 0 for v in string.gmatch(date, "%d+") do i = i + 1 t[tbl[i]] = v end return os.time(t) end print( dateToTime("2022-10-28 09:21:19") ) --计算两个字符串日期相差的时间戳 local function dateDiffTime(date1, date2, ComPany) return dateToTime(date1) - dateToTime(date2) end print( dateDiffTime("2022年12月28日09:27:16", "2022年10月28日09:27:20") ) print( dateDiffTime("2022年12月28日09:27:16", "2022年10月28日09:27:20") ) --获取脚本的运行时间(单位: 毫秒) local function tickCount() return os.clock() * 1000 end
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了