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

 

posted @ 2022-10-24 20:49  小书臣  阅读(45)  评论(0编辑  收藏  举报