Openresty资料之时间日期

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sky6even/article/details/90642002

◆ 当前时间:

下面三个函数能够获取不同格式的当前时间:

ngx.today():本地时间,格式是yyyy-mm-dd,不含时分秒
ngx.localtime():本地时间,格式是yyyy-mm-dd hh:mm:ss
ngx.utctime():UTC 时间,格式是yyyy-mm-dd hh:mm:ss

◆ 时间戳:

获取当前的时间戳可以使用两个函数:

ngx.time():当前的时间戳,即epoch以来的秒数
ngx.now():类似ngx.time,但返回的是浮点数,精确到毫秒

在实践中我们通常使用ngx.now获取更精确的时间用来计时,但要注意它只能精确到毫秒级别,想要获取更高的精确度需要通过ffi库调用系统函数gettimeofday()。

◆ 格式化时间戳:

时间戳和字符串格式的时间可以互相转换, OpenResty 提供三个函数:

ngx.http_time():把时间戳转换为http时间格式
ngx.cookie_time():把时间戳转换为cookie时间格式
ngx.parse_http_time():解析http 时间格式,转换为时间戳

示例:

local secs = 1514880339  -- 一个时间戳
ngx.say(ngx.http_time (secs))
ngx.say(ngx.cookie_time(secs))

local str = ” Tue, 02 Jan 2018 08 : 05 : 39 GMT ”  -- 一个http 格式的时间
ngx.say(ngx.parse_http_time(str))  -- 转换为时间戳

◆ 更新时间:

ngx.localtime/ngx.time/ngx.now等函数获取的时间基于OpenResty内部缓存的时
间,与实际时间相比可能存在微小的误差,如果想要随时获得准确的时间可以先调用函数ngx.update_time,然后再调用时间函数。

ngx.update_time会使用系统函数gettimeofday()强制更新时间,成本较高,除非
必要应当尽量少用。

ngx.update_time()    -- 强制更新内部缓存的时间
ngx.now()    -- 之后就可以获得更准确的时间

◆ ngx.sleep:

ngx.sleep是Openresty提供的同步非阻塞的睡眠函数,可以“睡眠”任意的时间长度
但不会阻塞整个服务,这时OpenResty会基于协程机制转而处理其他的请求,等睡眠时间到再“回头”继续执行ngx.sleep后续的代码。

ngx.sleep的时间单位是秒,可以用小数指定更小的时间(最小是0.001秒,即1毫
秒)

ngx.sleep(1.0)
ngx.sleep(0.001)

注:ngx.sleep不能在init_by_lua/init_worker_by_lua/set_by_lua/header|body_ filter_by_lua/log_by_lua等执行阶段里调用。

猜你喜欢

转载自blog.csdn.net/sky6even/article/details/90642002