openresty开发系列20--lua的时间操作

在 Lua 中,函数 time、date 和 difftime 提供了所有的日期和时间功能。
在 OpenResty 的世界里,不推荐使用这里的标准时间函数,
因为这些函数通常会引发不止一个昂贵的系统调用,同时无法为 LuaJIT JIT 编译,对性能造成较大影响。
推荐使用 ngx_lua 模块提供的带缓存的时间接口,
如 ngx.today, ngx.time, ngx.utctime, ngx.localtime, ngx.now, ngx.http_time,以及 ngx.cookie_time 等。

一)os.time ([table])
它会返回当前的时间和日期的时间戳(精确到秒),如赋值table,表示此table指定日期的时间戳

字段名称         取值范围
year             四位数字
month             1--12
day             1--31
hour             0--23
min             0--59
sec             0--59
isdst             boolean(true表示夏令时)

对于 time 函数,如果参数为 table,那么 table 中必须含有 year、month、day 字段。
其他字缺省时段默认为中午(12:00:00)。
print(os.time())    
a = { year = 2018, month = 1, day = 30, hour = 0, min = 0, sec = 0 }
print(os.time(a))

时间戳的是以计算机最小时间和指定时间之间相差的秒数,计算机最小时间为1970-1-1 00:00:00(美国时区),
针对中国时区就是1970-1-1 08:00:00
a = { year = 1970, month = 1, day = 1, hour = 8, min = 0, sec = 1 }
print(os.time(a))
输出的就是1秒

二)os.difftime (t2, t1)
返回 t1 到 t2 的时间差,单位为秒。

local day1 = { year = 2018, month = 1, day = 30 }
local t1 = os.time(day1)
local day2 = { year = 2018, month = 1, day = 31 }
local t2 = os.time(day2)
print(os.difftime(t2, t1))

--->output:86400

三)os.date ([format [, time]])
把一个表示日期和时间的数值,转换成更高级的表现形式。
格式字符             含义
%a                     一星期中天数的简写(例如:Wed)
%A                     一星期中天数的全称(例如:Wednesday)
%b                     月份的简写(例如:Sep)
%B                     月份的全称(例如:September)
%c                     日期和时间(例如:07/30/15 16:57:24)
%d                     一个月中的第几天[01 ~ 31]
%H                     24小时制中的小时数[00 ~ 23]
%I                     12小时制中的小时数[01 ~ 12]
%j                     一年中的第几天[001 ~ 366]
%M                     分钟数[00 ~ 59]
%m                     月份数[01 ~ 12]
%p                     "上午(am)"或"下午(pm)"
%S                     秒数[00 ~ 59]
%w                     一星期中的第几天[0 ~ 6 = 星期天 ~ 星期六]
%x                     日期(例如:07/30/15)
%X                     时间(例如:16:57:24)
%y                     两位数的年份[00 ~ 99]
%Y                     完整的年份(例如:2015)
%%                     字符'%'

print(os.date("today is %A, in %B"))
print(os.date("now is %x %X"))
print(os.date("%Y-%m-%d %H:%M:%S"))

-->output
today is Thursday, in July
now is 07/30/15 17:39:22
2018-03-29 22:36:05

---------------------------

t = os.date("*t", os.time());
for i, v in pairs(t) do
      print(i, v);
end

yday    120  --一年中的第几天,一月一日为1
month   4
sec     9
min     9
hour    16
day     30
year    2018
isdst   false  --是否夏令时
wday    2   --一周第几天  星期日为1

openresty开发系列20--lua的时间操作的更多相关文章

  1. openresty开发系列27--openresty中封装redis操作

    openresty开发系列27--openresty中封装redis操作 在关于web+lua+openresty开发中,项目中会大量操作redis, 重复创建连接-->数据操作-->关闭 ...

  2. openresty开发系列40--nginx+lua实现获取客户端ip所在的国家信息

    openresty开发系列40--nginx+lua实现获取客户端ip所在的国家信息 为了实现业务系统针对不同地区IP访问,展示包含不同地区信息的业务交互界面.很多情况下系统需要根据用户访问的IP信息 ...

  3. openresty开发系列18--lua的字符串string操作

    openresty开发系列18--lua的字符串string操作 string的相关操作 1)string.upper(s)接收一个字符串 s,返回一个把所有小写字母变成大写字母的字符串.print( ...

  4. openresty开发系列39--nginx+lua实现接口签名安全认证

    一)需求背景现在app客户端请求后台服务是非常常用的请求方式,在我们写开放api接口时如何保证数据的安全,我们先看看有哪些安全性的问题 请求来源(身份)是否合法?请求参数被篡改?请求的唯一性(不可复制 ...

  5. openresty开发系列28--openresty中操作mysql

    openresty开发系列28--openresty中操作mysql Mysql客户端   应用中最常使用的就是数据库了,尤其mysql数据库,那openresty lua如何操作mysql呢?   ...

  6. openresty开发系列24--openresty中lua的引入及使用

    openresty开发系列24--openresty中lua的引入及使用 openresty 引入 lua 一)openresty中nginx引入lua方式 1)xxx_by_lua   ---> ...

  7. openresty开发系列19--lua的table操作

    openresty开发系列19--lua的table操作 Lua中table内部实际采用哈希表和数组分别保存键值对.普通值:下标从1开始 不推荐混合使用这两种赋值方式. local color={fi ...

  8. openresty开发系列38--通过Lua+Redis 实现动态封禁IP

    openresty开发系列38--通过Lua+Redis 实现动态封禁IP 一)需求背景为了封禁某些爬虫或者恶意用户对服务器的请求,我们需要建立一个动态的 IP 黑名单.对于黑名单之内的 IP ,拒绝 ...

  9. openresty开发系列30--openresty中使用全局缓存

    openresty开发系列30--openresty中使用全局缓存 Nginx全局内存---本地缓存 使用过如Java的朋友可能知道如Ehcache等这种进程内本地缓存.Nginx是一个Master进 ...

随机推荐

  1. 微信小程序使用本地图片在真机不显示的问题

    最近做的小程序,在真机测试发现有些本地图片在开发工具上可以显示,但是在真机上预览的时候不能显示 代码是这样写的 <view class='seat-size' wx:for="{{it ...

  2. 2019牛客多校第三场 F.Planting Trees

    题目链接 题目链接 题解 题面上面很明显的提示了需要严格\(O(n^3)\)的算法. 先考虑一个过不了的做法,枚举右下角的\((x,y)\),然后二分矩形面积,枚举其中一边,则复杂度是\(O(n^3 ...

  3. P2018 消息传递[dp]

    题目描述 巴蜀国的社会等级森严,除了国王之外,每个人均有且只有一个直接上级,当然国王没有上级.如果A是B的上级,B是C的上级,那么A就是C的上级.绝对不会出现这样的关系:A是B的上级,B也是A的上级. ...

  4. 《少年先疯队》第八次团队作业:Alpha冲刺第三天

    前言   第三天冲刺会议    时间:2019.6.16   地点:宿舍 3.1 今日完成任务情况以及遇到的问题.   3.1.1今日完成任务情况 姚玉婷:酒店的会员信息的管理,如会员的添加,删除 马 ...

  5. 导出到CSV文件

    一.手工导出导出 1.winform void DataGridViewToExcel(DataGridView dataGridView1) { SaveFileDialog saveFileDia ...

  6. Tensorflow细节-P112-模型持久化

    第一个代码 import tensorflow as tf v1 = tf.Variable(tf.random_normal([1], stddev=1, seed=1)) v2 = tf.Vari ...

  7. Mysql 基础 1

    MySQL基础 1.概念 数据库,为我们提供高效.便捷的方式对数据进行增删改查的工具 优势 程序稳定.数据一致性.并发.效率 2.数据库管理系统 (DataBase Management System ...

  8. 014——C#新建文件夹

    (一)如果不存在路径就新建文件夹 string directory = @"C:\Users\Administrator\Desktop\温控数据\"; if (!Director ...

  9. 13、SparkContext详解

    一.SparkContext原理 1.图解 二.SparkContext源码 1.TaskScheduler创建 ###SparkContext.scala // Create and start t ...

  10. Pytest权威教程25-配置

    目录 配置 命令行选项和配置文件设置 初始化:确定ROOTDIR和INIFILE 寻找rootdir 如何更改命令行选项默认值 内置的配置文件选项 返回: Pytest权威教程 配置 命令行选项和配置 ...