Lua os库

前言

也做过几次需要使用到time和date的需求了,每次都要百度找一遍,感觉有点蛋疼,所以干脆花点时间研究并记录下这个时常要用到,但是又总是会忘记的这两个东西,刚好在os库里面,就干脆一起记录下来
申明下:这里面的东西我也是边学边记录的,如有错误,欢迎指出,谢谢。

一、开始研究

首先,要明白os库是什么:
os:操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。

二、Lua中的os库

话不多说,看标题就知道,既然是库,我们要用,知道接口就行了。
下面是从Lua官网上面找到的os库的对应接口。

  os.clock        程序使用CPU时间的一个近似值
  os.execute   执行命令
  os.time         获取时间戳
  os.date         根据参数返回对应格式的时间字符串
  os.difftime    获取两个时间戳的差值
  os.exit          退出
  os.getenv    获取系统信息的函数
  os.remove   删除文件或一个空目录
  os.rename   更改一个文件或目录名
  os.setlocale 设置程序的当前区域
  os.tmpname 返回一个临时的文件名
2.1 os.clock
2.1.1 简介和执行

这是一个比较有意思的函数,我的感觉是类似Unity里面的Time.time,也就是这个程序从一开始就记住了程序开始的时间,然后调用这个函数的时候执行了当前时间减去开始时间,然后得出值并且返回出来。

随便运行下
2.1.2 用法

从上面可以看出,os.clock有和Time.time一样的作用,可以用来知道某段代码执行消耗了多少时间,从而对代码进行针对性的修改

-- This is test.lua
local start_time = os.clock()
print("100000000次循环开始时间 : " .. start_time)

for i = 1, 100000000 do end

local end_time = os.clock()
print("100000000次循环开始时间 : " .. end_time)
print("100000000次循环消耗时间 : " .. (end_time - start_time))
执行效果.png
2.1.3 注意点

这个函数接触的不多,真正开发过程中很少有用到,百度一下,需要注意的是os.clock()有可能返回负值,原因是这个函数是用C来实现的,数字溢出会进行截断导致出现负数,而且在某些平台实现clock()和C标准不一样,会返回负值。


摘抄自网络

看看这个值,妈呀,这么大都还是正常的,那么如果要在这个CPU使用时间还用os.clock(),那还不如自己用时间戳在开始使用的时候记录下时间,然后要用的时候自己进行减法,误差也不会很大,所以只推荐用来计算某段代码执行消耗了多少时间。

2.2 os.execute
2.2.1 简介和执行

os.execute(cmd)

这是个很简单的函数了,就是在终端上执行命令,一般Unity开发中很少用到,很多语言也有类似这个作用的API供调用。
随便运行下.png
2.2.2 用法

开发过程中基本没用过,如果要用,根据它的定义,可以写脚本在终端执行命令,进行操作,不过,想想,这还不如直接写shell或者bat批处理来实现,还少了一层Lua。

2.3 os.time
2.3.1 简介和执行

os.time(date_tbl)
获取date_tbl这个表中存储(默认为当前时间)的时间距离格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)的秒数,也就是时间戳。


随便运行下
2.3.2 用法

时间戳的作用,那就多了去了,这是个神奇的东西

  • 完全可以实现上面os.clock()的作用,只不过精确到秒,但是在一般情况基本是够用了的。
  • 可以用来保存数据的唯一性,例如一个订单,可以在某个位置开始存储一个时间戳,到时候回看的时候一看就知道订单创建的时间。
  • 可以存储在数据库中,用来存储用户某个操作的时间,例如,每日活动,用时间戳存储起来,然后再用等下要记录的os.date()获取日期,判断是否是同一天,进行对应的操作。
  • ...........
-- This is test.lua
local function dosomethings(things)
    for i = 1, #things do
        print(string.format("you are %s at %d", things[i], os.time()))
        -- cmd暂停1秒,-n 2表示发包两次,1秒1次
        --直接执行的时候发了一个,所以发两个,即实现了暂停1秒的效果
        os.execute("ping 127.0.0.1 -n 2 > nul")  
    end
end

dosomethings({"起床", "刷牙", "洗脸", "上班", "加油"})
执行结果.png
2.4 os.date
2.4.1 简介和执行

首先,我记录os这个库的原因,就是因为这个函数,每次使用都要去百度上查一次,很麻烦,所以自己记录下,这个函数会写得比较多。

os.date(fmt, timestamp)
第一个参数是时间格式,默认为"%y%m%d %H:%M:%S",第二个参数是时间戳对应的number值,timestamp可以不传,默认为当前时间戳,即os.time()


随便运行下
2.4.2 用法
  1. os.date("t")
    os.date("
    t", timestamp) ,返回timestamp(默认当前时间)的date_tbl,可以说是和os.time(date_tbl)相对应,这两个函数可以相互照应写一直执行来执行去。
-- This is test.lua
local date_tbl = os.date("*t")
for i, v in pairs(date_tbl) do
    print(i .. " = ", v)
end
os.date("*t")
  1. 根据需要的格式获取对应日期值
格式符 含义 具体示例(范围均为闭区间)
%a 一星期中天数的简写 Sat
%A 一星期中天数的全称 Saturday
%b 月份的简写 Dec
%B 月份的全称 December
%c 日期和时间 12/02/17 14:42:07 (注解:17年12月2日)
%d 一个月中的第几天 02 范围:(01-31)
%H 小时制中的小时数 14[00 - 23]
%I 12小时制中的小时数 02[01 - 12]
%M 分钟数 42[00 - 59]
%m 月份数 12[01 - 12]
%P 上午或下午 (pm) [ {am, pm}]
%w 一星期中的第几天 6[0 - 6 = 星期天 - 星期六]
%W 一年中的第几个星期 48
%x 日期 12/02/17
%X 时间 14:42:07
%y 两位数的年份 17[00 - 99]
%Y 完整的年份 2017
%% 字符串'%' %

示例

local fmt = [[
    %%a = %a,   一星期中天数的简写
    %%A = %A,   一星期中天数的全称
    %%b = %b,   月份的简写
    %%B = %B,   月份的全称
    "%% = %c,   日期和时间"
    %%d = %d,   一个月中的第几天
    %%H = %H,   小时制中的小时数
    %%I = %I,   12小时制中的小时数
    %%M = %M,   分钟数
    %%m = %m,   月份数
    %%p = %p,   上午或下午
    %%w = %w,   一星期中的第几天
    %%W = %W,   一年中的第几个星期
    %%x = %x,   日期
    %%X = %X,   时间
    %%y = %y,   两位数的年份
    %%Y = %Y,   完整的年份
    %%%% = %%,   字符串%%
]]
print(os.date(fmt))
运行结果

看完上面,表示这个东西,好强大,感觉需要的东西都在这里面了。这里郑重表示下,我写这篇东西,就是因为看一篇Lua Date的文章,里面少了一个%W,这个获取一年中第几个星期的解释,搞得我写了一个算法,提交上去,同事告诉我有这个东西,然后重新写了一遍,难受,所以才来记录的,百度上面没找到,但是,google上面找到了,这个坑,我会记住的。。。。

2.5 os.difftime
2.5.1 简介和执行

os.difftime (t2, t1),获取t1到t2之间的秒数差


随便运行下

看了上面这个,你还有什么其他想法吗,还要记住是前面那个减去后面那个,还不如我自己直接去减。如果有谁知道这东西有什么神奇的用法,欢迎评论。

接下来的东西就不自己写了,前面的东西其实也是我一路找过来的,只是那些都比较重要而且常用,所以还是自己记录下来了(os.clock除外,这个东西我也没用过几次),刚好写的时候边写边找,看到一个简书作者,写的都挺好,而且还结合了C,而且,接下来的几个函数他都有记录,干脆就引用下,写在文章最后,再次也鸣谢下作者AlbertS

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,408评论 4 371
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,690评论 2 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,036评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,726评论 0 221
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,123评论 3 296
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,037评论 1 225
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,178评论 2 318
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,964评论 0 213
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,703评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,863评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,333评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,658评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,374评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,195评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,988评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,167评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,970评论 2 279

推荐阅读更多精彩内容

  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 4,005评论 0 19
  • 教程一:视频截图(Tutorial 01: Making Screencaps) 首先我们需要了解视频文件的一些基...
    90后的思维阅读 4,526评论 0 3
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,598评论 25 707
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,544评论 6 13
  • 做为一个懒癌晚期患者,在国外百无聊赖的待了一年多后,在见识了室友运动几年造就的妙曼身姿后,在看到自己臃肿的腰身每每...
    非洲喵阅读 236评论 0 0