lua time unix_lua中的os.time()函数中的 time() - CSDN
  • lua Date和Time

    2015-03-27 17:18:36
    time和date两个函数在Lua中实现所有的时钟查询功能。函数time在没有参数时返回当前时钟的数值。(在许多系统中该数值是当前距离某个特定时间的秒数。)当为函数调用附加一个特殊的时间表时,该函数就是返回距该表...

    time和date两个函数在Lua中实现所有的时钟查询功能。函数time在没有参数时返回当前时钟的数值。(在许多系统中该数值是当前距离某个特定时间的秒数。)当为函数调用附加一个特殊的时间表时,该函数就是返回距该表描述的时间的数值。这样的时间表有如下的区间:

    year

    a full year

    month

    01-12

    day

    01-31

    hour

    01-31

    min

    00-59

    sec

    00-59

    isdst

    a boolean, true if daylight saving

    前三项是必需的,如果未定义后几项,默认时间为正午(12:00:00)。如果是在里约热内卢(格林威治向西三个时区)的一台Unix计算机上(相对时间为1970年1月1日,00:00:00)执行如下代码,其结果将如下。

    -- obs: 10800 = 3*60*60 (3 hours)

    print(os.time{year=1970, month=1, day=1, hour=0})

        --> 10800

    print(os.time{year=1970, month=1, day=1, hour=0, sec=1})

        --> 10801

    print(os.time{year=1970, month=1, day=1})

        --> 54000   (obs: 54000 = 10800 + 12*60*60)


    os.time()                <== 返回当前系统的日历时间
    os.date()                <== 返回本地化的时间字符串,这里是"11/28/08 17:23:37"
    os.date("%x", os.time()) <== 返回自定义格式化时间字符串(完整的格式化参数),这里是"11/28/08"
    os.clock()               <== 返回执行该程序CPU花去的时钟秒数,这里是1156.726


    函数data,不管它的名字是什么,其实是time函数的一种“反函数”。它将一个表示日期和时间的数值,转换成更高级的表现形式。其第一个参数是一个格式化字符串,描述了要返回的时间形式。第二个参数就是时间的数字表示,默认为当前的时间。使用格式字符 "*t",创建一个时间表。例如下面这段代码:

    temp = os.date("*t", 906000490)

    则会产生表

    {year = 1998, month = 9, day = 16, yday = 259, wday = 4,

     hour = 23, min = 48, sec = 10, isdst = false}

    不难发现该表中除了使用到了在上述时间表中的区域以外,这个表还提供了星期(wday,星期天为1)和一年中的第几天(yday,一月一日为1)除了使用 "*t" 格式字符串外,如果使用带标记(见下表)的特殊字符串,os.data函数会将相应的标记位以时间信息进行填充,得到一个包含时间的字符串。(这些特殊标记都是以 "%" 和一个字母的形式出现)如下:

    print(os.date("today is %A, in %B"))

        --> today is Tuesday, in May

    print(os.date("%x", 906000490))

        --> 09/16/1998

    这些时间输出的字符串表示是经过本地化的。所以如果是在巴西(葡萄牙语系),"%B" 得到的就是 "setembro"(译者按:大概是葡萄牙语九月?),"%x" 得到的就是 "16/09/98"(月日次序不同)。标记的意义和显示实例总结如下表。实例的时间是在1998年九月16日,星期三,23:48:10。返回值为数字形式的还列出了它们的范围。(都是按照英语系的显示描述的,也比较简单,就不烦了)

    %a

    abbreviated weekday name (e.g., Wed)

    %A

    full weekday name (e.g., Wednesday)

    %b

    abbreviated month name (e.g., Sep)

    %B

    full month name (e.g., September)

    %c

    date and time (e.g., 09/16/98 23:48:10)

    %d

    day of the month (16) [01-31]

    %H

    hour, using a 24-hour clock (23) [00-23]

    %I

    hour, using a 12-hour clock (11) [01-12]

    %M

    minute (48) [00-59]

    %m

    month (09) [01-12]

    %p

    either "am" or "pm" (pm)

    %S

    second (10) [00-61]

    %w

    weekday (3) [0-6 = Sunday-Saturday]

    %x

    date (e.g., 09/16/98)

    %X

    time (e.g., 23:48:10)

    %Y

    full year (1998)

    %y

    two-digit year (98) [00-99]

    %%

    the character '%'

    事实上如果不使用任何参数就调用date,就是以%c的形式输出。这样就是得到经过格式化的完整时间信息。还要注意%x、%X和%c由所在地区和计算机系统的改变会发生变化。如果该字符串要确定下来(例如确定为mm/dd/yyyy),可以使用明确的字符串格式方式(例如"%m/%d/%Y")。

    函数os.clock返回执行该程序CPU花去的时钟秒数。该函数常用来测试一段代码。

    local x = os.clock()

    local s = 0

    for i=1,100000 do s = s + i end

    print(string.format("elapsed time: %.2f\n", os.clock() - x))

    展开全文
  • ----- lua函数os.time 源码见 loslib.c 中的 int os_... 直接返回time(NULL),即UNIX时间戳,也即UTC时间 1970-01-01 00:00:00 至今的秒数 注:其中C库函数 time_t time(time_t *seconds) 返回自纪元 Epoch(1970...

    -----

    lua函数os.time
    源码见 loslib.c 中的 int os_time (lua_State *L)

    lua中无参数调用:os.time()
    直接返回time(NULL),即UNIX时间戳,也即UTC时间 1970-01-01 00:00:00 至今的秒数

    lua中有参数调用:os.time({year=, month=, day=, hour=, ..})
    将参数放入tm结构,返回mktime(tm*)。注意:mktime将参数视为本地时间,将其转成UTC时间后,返回减去UTC 1970-01-01的差值

    所以,print(os.time({year=1970, month=1, day=1, hour=8})) == 0,
    因为,北京时间 1970-01-01 08:00:00 == UTC时间 1970-01-01 00:00:00 == Epoch
    另外,不带参数的os.time() 可认为默认参数为:当前时区的当前时间,一样说得通

    -----

    lua函数os.date([format [, time]])
    源码见 loslib.c 中的 int os_date (lua_State *L)

    如果lua调用中有第二个参数,t=time,否则t=time(NULL);这里不是关注的重点,略去不表。

    当format中第一个字符为'!'
    stm = l_gmtime(&t, &tmr); // l_gmtime就是gmtime_r,即 struct tm *gmtime_r(const time_t *, struct tm *)
    将UNIX时间戳转换为tm结构,输出UTC时区的时间

    当format中第一个字符不是'!'
    stm = l_localtime(&t, &tmr); // l_gmtime就是localtime_r,即 struct tm *localtime_r(const time_t *, struct tm *)
    将UNIX时间戳转换为tm结构,输出本地时区的时间

    -----

    计算当前时区
    now = os.time()
    os.difftime(now, os.time(os.date("!*t", now))) / 3600

    now是当前时间戳,os.date("!*t", now)是当前时间戳对应的UTC时间,
    os.time(os.date("!*t", now))是把当前UTC时间视为本地时间再计算时间戳,注意真正的转换发生在这里!
    所以如果相差8个小时(8*3600秒),说明当前时区是东八区(北京时间)
     

    展开全文
  • Lua时间戳和日期转换

    2019-06-16 15:33:37
    os.date("%Y%m%d%H",unixtime) --os.date("%Y%m%d%H",1534435200) 2018081700 二、日期转时间戳 ---指定日期的时间戳 os.time({day=17, month=8, year=2018, hour=0, minute=0, second=0}) --1534435200 三、...

    一、时间戳转日期

    os.date("%Y%m%d%H",unixtime)
    --os.date("%Y%m%d%H",1534435200)  2018081700

    二、日期转时间戳

    ---指定日期的时间戳
    os.time({day=17, month=8, year=2018, hour=0, minute=0, second=0})
    --1534435200

    三、当前时间戳

    os.time()

     

    四、格式占位符

    --时间格式 yyyyMMddHHmmss
    print(os.date("%Y-%m-%d %H:%M %S", os.time()))
    ---输出 2019-01-30 10:47 53
        print(os.date("%m月%d日  %H:%M", os.time())) --输出  01月30日  10:44

     

    五、转成年月日接口

    function Tool.FormatUnixTime2Date(unixTime)
        if unixTime and unixTime >= 0 then
            local tb = {}
            tb.year = tonumber(os.date("%Y",unixTime))
            tb.month =tonumber(os.date("%m",unixTime))
            tb.day = tonumber(os.date("%d",unixTime))
            tb.hour = tonumber(os.date("%H",unixTime))
            tb.minute = tonumber(os.date("%M",unixTime))
            tb.second = tonumber(os.date("%S",unixTime))
            return tb
        end
    end

    当然,如果你只需要拿天数进行比较,可以使用tonumber(os.date("%d",unixTime))

     

    比如这两个零点日期,通过上述接口计算的dd是非常接近的!

    日期 unix timestamp 计算值
    2018/8/16 23:59:59 1534435199 17759.66665509259
    2018/8/17 00:00:01 1534435201 17759.66667824074

     注意:本内容来自qingqing.zhao's blog

    展开全文
  • 介绍lua的日期函数常用方法及我的一个踩坑。 时间戳转日期 os.date("%Y%m%d%H",unixtime) --os.date("%Y%m%d%H",1534435200) 2018081700 日期转时间戳 ---指定日期的时间戳 os.time({day=17, month=8, year=2018, ...

    介绍lua的日期函数常用方法及我的一个踩坑。

    时间戳转日期

    os.date("%Y%m%d%H",unixtime)
    --os.date("%Y%m%d%H",1534435200)  2018081700

    日期转时间戳

    ---指定日期的时间戳
    os.time({day=17, month=8, year=2018, hour=0, minute=0, second=0})
    --1534435200

    当前时间戳

    os.time()

    格式占位符

    --时间格式 yyyyMMddHHmmss
    print(os.date("%Y-%m-%d %H:%M %S", os.time()))
    ---输出 2019-01-30 10:47 53
        print(os.date("%m月%d日  %H:%M", os.time())) --输出  01月30日  10:44

    转成年月日接口

    function Tool.FormatUnixTime2Date(unixTime)
        if unixTime and unixTime >= 0 then
            local tb = {}
            tb.year = tonumber(os.date("%Y",unixTime))
            tb.month =tonumber(os.date("%m",unixTime))
            tb.day = tonumber(os.date("%d",unixTime))
            tb.hour = tonumber(os.date("%H",unixTime))
            tb.minute = tonumber(os.date("%M",unixTime))
            tb.second = tonumber(os.date("%S",unixTime))
            return tb
        end
    end

    当然,如果你只需要拿天数进行比较,可以使用tonumber(os.date("%d",unixTime))

    踩坑日志

    不建议采用以下方式计算日期

    function Tool.FormatDiffUnixTime2Tb(diffUnixTime)
        if diffUnixTime and diffUnixTime >= 0 then
            local tb = {}
            ---一天的秒数86400
            tb.dd = math.floor(diffUnixTime / 60 / 60 / 24)
            tb.hh = math.floor(diffUnixTime / 3600) % 24
            tb.mm = math.floor(diffUnixTime / 60) % 60
            tb.ss = math.floor(diffUnixTime % 60)
            return tb
        end
    end

    比如这两个零点日期,通过上述接口计算的dd是非常接近的!

    日期 unix timestamp 计算值
    2018/8/16 23:59:59 1534435199 17759.66665509259
    2018/8/17 00:00:01 1534435201 17759.66667824074

    转换计算工具

    时间戳转换:http://tool.chinaz.com/Tools/unixtime.aspx

    秒转成时间:http://cn.bestconverter.org/unitconverter_time.php

    参考资料

    https://www.cnblogs.com/Denny_Yang/p/6197435.html

    http://www.cnblogs.com/whiteyun/archive/2009/08/10/1542913.html

    http://blog.csdn.net/goodai007/article/details/8077285

    转载于:https://www.cnblogs.com/zhaoqingqing/p/9487479.html

    展开全文
  • LuaSocket 是一个Lua的拓展库。包括两个部分:C语言编写提供Tcp和Udp 传输层协议的核心模块和支持处理网络Lua模块。 核心模块被高效且简单的是实现。仅仅要嵌入lua解释器就可以使用。核心模块已经在多个windows和...


    LuaSocket 简介:

    LuaSocket is a Lua extension library that is composed by two parts:
    a C core that provides support for the TCP and UDP transport layers, and a set of Lua modules that add support for functionality commonly needed by applications that deal with the Internet.

    the core support has been implemented so that it is both efficient and simple to use. It is available to any Lua application once it has been properly initialized by the interpreter in use. 
    The code has been tested and runs well on several Windows and Unix platforms.

    LuaSocket version 2.0.2 is now available for download! It is compatible with Lua 5.1, and has been tested on Windows XP, Linux, and Mac OS X.
    2.0.2 is just a bug-fix/update release.
    LuaSocket 是一个Lua的拓展库。包括两个部分:C语言编写提供Tcp和Udp 传输层协议的核心模块和支持处理网络Lua模块。
    核心模块被高效且简单的是实现。仅仅要嵌入lua解释器就可以使用。核心模块已经在多个windows和unix 操作系统测试和运行。
    LuaSocket 2.0.2版本和Lua 5.1.x版本兼容,已经在window xp ,linux 和 Mac os X操作系统测试过。
    LuaSocket 作为一个bug 修复版本释放。


    LuaSocket 使用:

    本文使用windows  7 操作系统和使用vs2010 工具。所以仅仅测试winsock api 部分。

     1,在导入头文件和源文件时,移除usocket等相关unix操行系统下的文件。

     2 在wsocket.h 中加入  #pragma comment(lib,"ws2_32.lib") 导入 winsock库,否则在link过程中,会找到socket api相关函数。


    luasocketsample.cpp 文件内容如下:

    extern "C" 
    {
    	#include "lua.h"
    	#include "lauxlib.h"
    	#include "lualib.h"
    	#include "luasocket.h" //使用LuaSocket 库仅仅需要包含的头文件。
    }
    int main(int argc, char **argv)
    {     //创建lua_State
    	  lua_State *L = lua_open();  /* create state */
    	  //注册标准库
    	  luaL_openlibs (L);
    	  //注册LuaSocket库
    	  luaopen_socket_core(L);
    	  //执行sample_1.lua
    	  luaL_dofile (L, "luasocketsample.lua");
    	  //关闭lua_State
    	  lua_close(L);
              return 1;
    }

    在LuaSocket 源代码中有例子,以下例子取自echosrvr.lua 文件并部分修改:

    local host = host or "127.0.0.1"
    local port = port or 8080
    
    print("Binding to host '" ..host.. "' and port " ..port.. "...")
    --创建udp对象
    udp = assert(socket.udp())
    --绑定到指定的端口
    assert(udp:setsockname(host, port))
    --设置超时时间
    assert(udp:settimeout(5))
    --获取绑定IP和端口
    ip, port = udp:getsockname()
    assert(ip, port)
    print("Waiting packets on " .. ip .. ":" .. port .. "...")
    local recvmaxbyte =20
    --单线程无限循环
    while 1 do
        --接收udp packet
    	dgram, ip, port = udp:receivefrom(recvmaxbyte)
    	if(dgram=="终止")then
    	    print("终止")
    		break
    	end
    	if dgram then
    		print("Echoing '" .. dgram .. "' to " .. ip .. ":" .. port)
    		--发送数据
    		udp:sendto(dgram, ip, port)
    	else
            print(ip)
        end
    end
    udp=nil
    collectgarbage("collect")

    运行结果如下:



    luasocket文件为使用LuaSokct 需要包含的文件,代码非常简单。

    /*=========================================================================*\
    * LuaSocket toolkit
    * Networking support for the Lua language
    * Diego Nehab
    * 26/11/1999
    *
    * This library is part of an  effort to progressively increase the network
    * connectivity  of  the Lua  language.  The  Lua interface  to  networking
    * functions follows the Sockets API  closely, trying to simplify all tasks
    * involved in setting up both  client and server connections. The provided
    * IO routines, however, follow the Lua  style, being very similar  to the
    * standard Lua read and write functions.
    *
    * RCS ID: $Id: luasocket.c,v 1.53 2005/10/07 04:40:59 diego Exp $
    \*=========================================================================*/
    
    /*=========================================================================*\
    * Standard include files
    \*=========================================================================*/
    #include "lua.h"
    #include "lauxlib.h"
    
    #if !defined(LUA_VERSION_NUM) || (LUA_VERSION_NUM < 501)
    #include "compat-5.1.h"
    #endif
    
    /*=========================================================================*\
    * LuaSocket includes
    \*=========================================================================*/
    #include "luasocket.h"
    #include "auxiliar.h"
    #include "except.h"
    #include "timeout.h"
    #include "buffer.h"
    #include "inet.h"
    #include "tcp.h"
    #include "udp.h"
    #include "select.h"
    
    /*-------------------------------------------------------------------------*\
    * Internal function prototypes
    \*-------------------------------------------------------------------------*/
    static int global_skip(lua_State *L);
    static int global_unload(lua_State *L);
    static int base_open(lua_State *L);
    
    /*-------------------------------------------------------------------------*\
    * Modules and functions
    \*-------------------------------------------------------------------------*/
    //这是LuaSocket 提供的所有Lua 模块功能
    static const luaL_reg mod[] =
    {
        {"auxiliar", auxiliar_open},
        {"except", except_open},
        {"timeout", timeout_open},
        {"buffer", buffer_open},
        {"inet", inet_open},
        {"tcp", tcp_open},
        {"udp", udp_open},
        {"select", select_open},
        {NULL, NULL}
    };
    
    static luaL_reg func[] =
    {
        {"skip",      global_skip},
        {"__unload",  global_unload},
        {NULL,        NULL}
    };
    
    /*-------------------------------------------------------------------------*\
    * Skip a few arguments
    \*-------------------------------------------------------------------------*/
    static int global_skip(lua_State *L)
    {
        int amount = luaL_checkint(L, 1);
        int ret = lua_gettop(L) - amount - 1;
        return ret >= 0 ? ret : 0;
    }
    
    /*-------------------------------------------------------------------------*\
    * Unloads the library
    \*-------------------------------------------------------------------------*/
    static int global_unload(lua_State *L)
    {
        (void) L;
        socket_close();
        return 0;
    }
    
    /*-------------------------------------------------------------------------*\
    * Setup basic stuff.
    \*-------------------------------------------------------------------------*/
    static int base_open(lua_State *L)
    {
    	//通过判断不同操作系统提供的socket 基础,在window操作系统是使用winsock2.0版本
        if (socket_open()) 
    	{
            /* export functions (and leave namespace table on top of stack) */
    		//注册LuaSocket到_G["socket"]
            luaL_openlib(L, "socket", func, 0);
    #ifdef LUASOCKET_DEBUG
            lua_pushstring(L, "_DEBUG");
            lua_pushboolean(L, 1);
            lua_rawset(L, -3);
    #endif
            /* make version string available to scripts */
            lua_pushstring(L, "_VERSION");
            lua_pushstring(L, LUASOCKET_VERSION);
            lua_rawset(L, -3);
            return 1;
        } else {
            lua_pushstring(L, "unable to initialize library");
            lua_error(L);
            return 0;
        }
    }
    
    /*-------------------------------------------------------------------------*\
    * Initializes all library modules.
    \*-------------------------------------------------------------------------*/
    //使用LuaSocket ,luaopen_socket_core()函数来注册所有相关模块.
    LUASOCKET_API int luaopen_socket_core(lua_State *L) 
    {
        int i;
        base_open(L);
        for (i = 0; mod[i].name; i++) mod[i].func(L);
        return 1;
    }
    

    小结:

    LuaSocket  作为Lua的网络拓展库,使用LuaSocket 可以跨平台。可以在window ,unix 以及mac 操作系统下面使用。window 平台下面,LuaSocket 仅仅使用14个头文件。

    源代码行数在大于1000行到2000行之间。库小,很容易理解学习。在window 操作系统下面,仅仅使用了select IO模型。像Java Nio 底层也是封装了window操行系统的select

    IO模型。在学习过程中,可以使用最小的理解成本来学习如果封装一个socket网络库。这一点很赞。还有LuaSocket 库提供的功能小巧实用,没有多余代码。Socket 核心部分通过wsocket和usocket 来提供,udp 和tcp 协议通过单独文件来实现。我希望通过对LuaSocket 库学习来更好理解 学习 封装自己的网络库。

    同时,LuaSocket  提供面向对象编程方法,这样我们还可以继续复习之前Lua和C语言交互部分。如果对Lua和C语言交互部分不能深刻理解,在学习LuaSocket 部分会有不少阻碍。

    展开全文
  • openresty lua时间操作

    2020-05-13 13:49:50
    Lua 中,函数 time、date 和 difftime 提供了所有的日期和时间功能。 在 OpenResty 的世界里,不推荐使用这里的标准时间函数, 因为这些函数通常会引发不止一个昂贵的系统调用,同时无法为 LuaJIT JIT 编译,对...
  • lua时间函数操作和对比代码,os.date() os.time() 2015-04-27 20:33 1163人阅读 评论(0) 收藏 举报  分类: Lua(1)  版权声明:本文为博主原创文章,未经博主允许不得转载。 ...
  • lua 时间戳和时间互转

    2018-01-11 14:54:46
    1、时间戳转换成时间 local t = 1412753621000 function getTimeStamp(t)  return os.date("%Y%m%d%H",t/1000) end print(getTimeStamp(t)) ...os.time() -- 当前时间戳 ...os.time({day=17, month=5, year=
  • 我们知道,lua通过lua_State堆栈可以很方便的与C语言进行交互 http://blog.csdn.net/sm9sun/article/details/68946343 也可以调用专门为lua调用而封装的C库。 具体步骤: 1.原C文件中引入lua相关头文件 #include ...
  • ngx.now() 返回:1523174287.735 毫秒级精度的时间戳(获取的是nginx缓存的时间戳,并非实时刷新, 如果希望刷新,可以在获取前一行加上ngx.update_time()) ngx.time(...
  • 基本概念 函数Date
  • Lua lfs库这个库可以实现平台无关(Linux和Windows通用)的文件系统访问 官网地址 Github项目地址如何配置:5.1以上的lua已经包含了lfs库,路径是Lua5.1\clibs\lfs.dll,我们无需配置直接require “lfs”使用即可...
  • ngx_lua模块

    2020-02-17 17:24:13
    ngx_lua模块的原理: 1、每个worker(工作进程)创建一个Lua VM,worker内所有协程共享VM; 2、将Nginx I/O原语封装后注入 Lua VM,允许Lua代码直接访问; 3、每个外部请求都由一个Lua协程处理,协程之间数据隔离;...
  • PS:仅作记录,自查具体实现 一、基本库函数(basic functions) _G:保存全局环境的全局..._VERSION:保存包含当前解释器版本的字符串的全局变量(不是函数),5.1中这个变量的值是“Lua 5.1”。 assert(v [, mess...
  • ngx_lua 模块

    2018-09-06 10:23:44
    ngx_lua模块的原理: 1、每个worker(工作进程)创建一个Lua VM,worker内所有协程共享VM; 2、将Nginx I/O原语封装后注入 Lua VM,允许Lua代码直接访问; 3、每个外部请求都由一个Lua协程处理,协程之间数据隔离;...
  • local from = os.time({year=2020, month=06, day=22, hour=00, min=00, sec=00}) --有些版本是minute/second不是min/sec local to = os.time({year=2020, month=06, day=22, hour=01, min=00, sec=00}) --如果想要...
  • Lua 5.3 参考手册

    2016-06-12 14:43:12
    Lua 是一门扩展式程序设计语言,被设计成支持通用过程式编程,并有相关数据描述设施。同时对面向对象编程、函数式编程和数据驱动式编程也提供了良好的支持。它作为一个强大、轻量的嵌入式脚本语言,可供任何需要的...
1 2 3 4 5 ... 20
收藏数 7,087
精华内容 2,834
关键字:

lua time unix