Lua语言一行代码将时间戳展示为日期

947 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

最近在开发wireshark的Lua脚本插件,主要是进行自定义的协议解析,其中涉及到要将数据包的捕获时间这一Field展示出来的需求。不过数据直接解析出来是时间戳的形式,不方便客户阅读(刚刚产品经理过来告诉我其实没有这个需求,不过你做了就做了吧...艹),因此需要定义一个函数完成时间戳转换为日期式时间的功能。

好了,直接进入代码环节。Let's go!

-- 定义将时间戳转换为日期式时间的方法
function stamp2date(offset)
    local stamp_time = tvb(offset,4)    -- 这条代码你可以理解为在我的应用场景里获取时间戳的一行代码,看不懂没关系,是wireshark的lua脚本专用接口
    return os.date("%Y-%m-%d %H:%M:S",stamp_time)   -- 本文核心,使用os.date(format,stampTime)方法将时间戳转换为指定格式的日期,本例中将返回一个2021-09-26 16:26:32格式的数据
end

os.date(format,stampTime) 是Lua自带的一个方法,也正是本文用来将时间戳转换为任意自定义格式日期的方法,具体使用方法如上述代码所示,下面详细介绍一下该方法;

该方法涉及到两个参数,formatstampTime:

  • format: 自定义的日期表现格式,可使用字符如下:

    字符意义示例
    os.date("%a")abbreviated weekday nameSun
    os.date("%A")full weekday nameSunday
    os.date("%b")abbreviated month nameJul
    os.date("%B")full month nameJuly
    os.date("%c")date and time07/27/14 17:42:09
    os.date("%d")day of the month27
    os.date("%H")hour, using a 24-hour clock (23) [00-23]17
    os.date("%I")hour, using a 12-hour clock (11) [01-12]5
    os.date("%M")minute (48) [00-59]42
    os.date("%m")month (09) [01-12]7
    os.date("%p")either "am" or "pm" (pm)PM
    os.date("%S")second (10) [00-61]9
    os.date("%w")weekday (3) [0-6 = Sunday-Saturday]0
    os.date("%x")date07/27/14
    os.date("%X")time(e.g., 23:48:10)17:42:09
    os.date("%Y")full year (2016)2016
    os.date("%y")two-digit year (98) [00-99]16
  • stampTime: 待转换的整型时间戳数据;

综上,就是在Lua语言中将时间戳转换为日期的方法了,如果您还有任何问题都可以私信或者留言。

如果觉得本文有一丁丁用的话希望点赞留言(:

对本文有任何意见或建议烦请私信或者留言,还望各位不吝赐教。